实体框架代码优先 - 无法在对象“db”中插入重复键

2023-12-05

我首先在我的一个项目中使用新的 EF 代码,并且收到一个奇怪的错误,我的模式是:

abstract class Member
{
   public virtual int MemberId;
  ... some other stuff

}

class User : Member
{
    public virtual string Name;
    ... some more props no new key defined
}

class MyDbContext
{
    public DbSet<User> Users {get;set;}
}

部署到 SQL Server 的结果很好,我有一个成员表和一个用户表(TPC)。 现在在我的主要部分有以下代码:

static Main()
{
   User x,y;
   using(MyDbContext ctx = new MyDbContext())
   {


    x = ctx.Users.Create();
    y = ctx.Users.Create();
    x.Name = "SomeUser";
    y.Name = "SomeUser2";
    ctx.SaveChanges();

   }
}

保存更改时我得到:

“未处理的异常: System.Data.Entity.Infrastruct.DbUpdateException: 更新时发生错误 条目。请参阅内部异常 细节。 ---> System.Data.UpdateException:错误 更新条目时发生。 有关详细信息,请参阅内部异常。 ---> System.Data.SqlClient .SqlException:违反 PRIMARY 关键约束 'PK_Users_0CF04B1821B6055D'。不能 在对象中插入重复的键 ‘dbo.用户’。”

默认情况下,MemberId 是身份,所以我只是看不到这里发生了什么。我尝试使用 new 创建实例并将它们附加到上下文,但错误是相同的,有什么想法吗? 数据库为空!

Thanks.

编辑:忘记告诉成员是一个抽象类,对此感到抱歉。


我刚刚在 TPC 中测试了它和派生类型表(每种具体类型的表)继承在 EF 4.1 RC 中没有将 PK 定义为身份。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实体框架代码优先 - 无法在对象“db”中插入重复键 的相关文章

随机推荐