6

我試圖使用foreign key association方法實現EF中的一對一關聯。在我的情況下,用戶和團隊之間存在關聯,並且我需要每個人都有導航屬性。 嘗試保存數據時遇到了問題。實體框架將數據保存爲一對一關聯

這是什麼型號的樣子:添加像數據時

modelBuilder.Entity<User>() 
    .HasRequired(u => u.Team) 
    .WithMany() 
    .HasForeignKey(u => u.TeamID); 

modelBuilder.Entity<Team>() 
    .HasRequired(t => t.Owner) 
    .WithMany() 
    .HasForeignKey(t => t.OwnerID) 
    .WillCascadeOnDelete(false); 

現在:

public class Team 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public int OwnerID { get; set; } 
    public virtual User Owner { get; set; } 
} 

public class User 
{ 
    public int ID { get; set; } 
    public string UserName { get; set; } 

    public int TeamID { get; set; } 
    public virtual Team Team { get; set; } 
} 

我說這些位到DbContextOnModelCreating(),如上面提到的博客文章指示這個:

User u = new User(); 
u.UserName = "farinha"; 
Team t = new Team("Flour Power"); 
u.Team = t; 
t.Owner = u; 
context.Users.Add(u); 
context.Teams.Add(t); 
context.SaveChanges(); 

甚至像這樣:

User u = new User(); 
u.UserName = "farinha"; 
u.Team = new Team("Flour Power"); 
context.Users.Add(u); 
context.SaveChanges(); 

,我發現了以下錯誤:

Unable to determine a valid ordering for dependent operations. Dependencies may exist due to foreign key constraints, model requirements, or store-generated values.

如何解決這個任何想法?我是否以錯誤的方式保存數據?

在此先感謝

回答

8

你不保存數據錯誤的方式,但它因爲你定義的雙向依賴,根本無法正常工作。只有在與已保存的用戶和用戶相關的現有團隊相關時才能保存團隊。你必須做出一個關係通過(在User例如TeamId)標記外鍵屬性爲空的可選:

public class User 
{ 
    public int ID { get; set; } 
    public string UserName { get; set; } 

    public int? TeamID { get; set; } 
    public virtual Team Team { get; set; } 
} 

然後,你必須先保存User實體,然後就可以保存Team

User u = new User(); 
u.UserName = "farinha"; 
context.Users.Add(u); 
context.SaveChanges(); 

u.Team = new Team { Name = "Flour Power", OwnerID = u.ID }; 
context.SaveChanges(); 
+0

@ ladislav-mrnka這會導致錯誤更改爲'不能將值NULL插入列'TeamID',表'DeuceHigh.dbo.User';列不允許有空值。 INSERT失敗。聲明已被終止。「# – Farinha 2011-05-10 23:27:45

+1

@Farinha由於您的模型已更改,您的數據庫表是否已更新? – DDiVita 2011-05-11 01:13:26

+0

@Farinha:這是數據庫級錯誤,這意味着用戶表中的TeamID仍然不可空。您沒有重新創建或修改數據庫。 – 2011-05-11 07:04:11