我使用新的EF代碼首先向我的一個項目,我得到一個奇怪的錯誤,我的方式是:實體框架代碼優先 - 無法插入重複鍵對象「DB」
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.Infrastructure.DbUpdateException: 出錯同時更新 條目請參閱 detail的內部例外---> System.Data.UpdateException:在更新條目時發生了錯誤 有關詳細信息,請參閱內部例外 ---> System.Data.SqlClient.SqlException:違反PRIMARY KEY約束 'PK_ 用戶 _0CF04B1821B6055D'。可在對象 「dbo.Users」。」
的成員Id在默認情況下不 插入重複鍵的身份,所以我只是沒有看到什麼是怎麼回事。我試圖創建一個新的實例和它們連接?上下文但錯誤是一樣的,任何想法 數據庫是空的
感謝
編輯:!忘了說,會員是一個抽象類對不起回合,
這是真的,但會員表有一個身份PK,所以它應該自動執行綁定 – DVD 2011-03-27 19:07:43
不,它不應該因爲它是每個具體類型的表。每個表處理自己的PK。此外,身份列不應該用於TPC繼承,因爲如果您查詢所有成員,它也會返回用戶。如果你不改變種子的身份,你將很容易得到具有相同ID的用戶和會員。在這種情況下,我期待例外。 – 2011-03-27 19:10:00
它是有道理的,事情是,我有一些共同的信息(成員)和一些其他具體的信息(例如用戶,管理員,訪客)我已經映射成員到表,因爲如果我想知道一些成員名稱我不需要知道它是一個用戶還是管理員等等。關鍵是用戶是一個直接成員,所以不可能有相同的ID ...成員也是一個抽象類,所以我甚至不能創建實例。 。 。 – DVD 2011-03-27 19:16:14