我使用EF Code-first开发我的ASP.NET MVC4应用程序,也使用迁移功能。我有特定的实体,出于某些原因,我想设置显式的id值。我该怎么做呢?我尝试用如下的属性来标记id属性:
public class NewsSource
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Id { get; set; }
public string Title { get; set; }
public string WebSiteUrl { get; set; }
}然后添加相应的迁移,删除数据库,并尝试使用Seed()方法更新数据库,如下所示:
context.NewsSources.AddOrUpdate(x => x.Title,
new NewsSource {Id = 654, Title = "ABC", WebSiteUrl = @"http://www.abc.com/"},
new NewsSource {Id = 22, Title = "XYZ", WebSiteUrl = @"http://XYZ.ru/"});我得到了这样的错误:“当IDENTITY_INSERT设置为OFF时,无法为表'NewsSources‘中的标识列插入显式值”。如何使用EF和迁移将identity_insert设置为ON。正如我从许多主题中了解到的那样,这是不可能的,我必须使用直接的SQL命令。我说错了吗?
发布于 2013-08-23 17:21:46
当我尝试将一列更改为标识字段时,我遇到了一个问题,而该列最初不是标识字段。See this question和this one。您必须删除该列并将其重新创建为remove IDENTITY,因此在迁移中修复外键等对于实体框架来说可能太远了。您必须自己修改Up()和Down()方法,否则您可能会在数据库中完成此操作。
发布于 2013-09-11 05:09:51
如果删除DatabaseGenerated属性而只保留Key属性,会发生什么?
public class NewsSource
{
[Key]
public int Id { get; set; }
public string Title { get; set; }
public string WebSiteUrl { get; set; }
}我前段时间遇到了这个问题,我相信这对我来说是一个变通的办法。我现在不能测试它,因为我面前没有任何包含EF的项目。我所能说的就是EF代码和nuget迁移包是一个很好的东西,如果你以你应该对待它的方式来对待它。当我将两者结合使用并尝试播种复杂的相关模型时,我已经让自己进入了许多WTF时刻。祝好运!
https://stackoverflow.com/questions/18373719
复制相似问题