0

我使用 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 命令。我错了吗?

4

2 回答 2

1

当我尝试将列更改为 IDENTITY 字段时遇到问题,而该字段原本不是身份字段。看到这个问题这个。您必须删除该列并重新创建它以删除 IDENTITY,因此修复外键等对于 Entity Framework 在迁移中执行的步骤可能太过分了。您必须自己更改 Up() 和 Down() 方法,否则您可能会在数据库中完成它。

于 2013-08-23T09:21:45.843 回答
0

如果您删除 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 时刻。祝你好运!

于 2013-09-10T21:09:50.650 回答