2014-10-08 93 views
0

我有3個表:在實體框架添加新的子記錄的父表6

帳戶: ID,姓名

用戶:標識,ACCOUNTID,名稱

UserDetail : Id,UserId,Phone

Entitites:

public partial class Account 
{ 
    public Account() 
    { 
     this.Users = new HashSet<User>(); 
    } 

    public int Id{get;set;} 
    public string Name{get;set;} 
    public virtual ICollection<User> Users{get;set;} 
} 

public partial class UserDetail 
{ 
    public int Id{get;set;} 
    public string Phone {get;set;} 
    public virual User User {get;set;} 
} 

public partial class User 
{ 
    public User() 
    { 
     this.Accounts = new HashSet<Account>(); 
    } 

    public int Id{get;set;} 
    public virtual ICollection<Account> Accounts {get;set;} 
    public virtual UserDetail UserDetail{get;set;} 
} 

正如您所看到的,Account to User是一對多關係,所以我的Account實體擁有Users DbSet。而用戶與UserDetail是一對一的關係。

我目前正試圖插入一個用戶和userdetail記錄到現有的帳戶。所以,我的代碼如下所示:

var newUserDetail = new UserDetail(); 
newUserDetail.Phone = 014109842; 

var newUser = new User(); 
newUser.Name = "John Smith"; 
newUser.UserDetail = newUserDetail; 

var currentAccount = _dbContext.Accounts.First(a => a.Id == 100); 
currentAccount.User.Add(newUser); 
_dbContext.SaveChanges(); 

,我發現了以下錯誤: 「在ReferentialConstraint從屬屬性映射到一個存儲生成的列柱:‘身份證’。」

想法?

+0

如果爲帳戶,用戶和UserDetail提供您的班級定義,您將獲得更多幫助。 – 2014-10-09 00:04:19

+0

@EtihwSirhc我現在做了 – amythn04 2014-10-09 07:37:23

回答

1

ReferentialConstraint中的依賴屬性映射到商店生成的列。專欄:「ID」

我更詳細地研究了這個錯誤,跨越此帖一:A dependent property in a ReferentialConstraint is mapped to a store-generated column

基本上,它說,UserDetail.Id(取決於物業)具有參照約束,也是一個存儲生成列即自動增量。

解決方案是刪除autoincrement屬性或添加一個不同的FK用戶UserDetail或UserDetail用戶。

吸取的經驗教訓: 1.絕對有名稱的類/表的標識列。例如,如果可以,請使用表名作爲前綴命名您的身份(PK)列。所以在我的問題中,我應該將所有Id列重新命名爲AccountId,UserId和UserDetailId。

爲什麼?

EF已經給我一個明顯的線索來看看UserDetailId上的映射的innerexception。沒有這個,我一直想知道哪個映射是有問題的映射。

0

試試這個。

var newUserDetail = new UserDetail(); 
newUserDetail.Phone = 014109842; 
_dbContext.UserDetail.Add(newUserDetail); 

var newUser = new User(); 
newUser.Name = "John Smith"; 
_dbContext.User.Add(newUser); 

_dbContext.saveChanges(); // save changes so the db can generate ID's 

newUser.UserDetail = newUserDetail; 

var currentAccount = _dbContext.Accounts.First(a => a.Id == 100); 
currentAccount.User.Add(newUser); 
_dbContext.SaveChanges(); 
+0

我應該提到這是一個DB首先是EF模型,對不起!我無法對模型進行更改。帳戶表不具有用戶表的外鍵。用戶表具有映射到帳戶表的Id的AccountId。 EF模型生成器創建了映射。 – amythn04 2014-10-09 10:22:49

+0

對,這就是我不問的問題。更新了我的答案。 – 2014-10-09 12:07:09

+0

這個想法確實讓我想起了,但是我想知道如果我能夠在帳戶控制器中使用另一個UserService類(如果你知道我的意思)是否可以離開。另外,如果我這樣做,我使用的工作模式將會中斷。 – amythn04 2014-10-09 15:06:44

相關問題