2016-04-29 54 views
1

這是我的兩個簡化實體代碼第一外鍵衝突

public class Team 
{ 
    public int TeamId { get; set; } 

    public string Name { get; set; } 

    public User User { get; set; } 

    public int UserId { get; set; } 
} 

團隊實體配置:

HasRequired(t => t.User) 
      .WithOptional(u => u.Team); 

用戶等級:

public class User 
{ 
    public int UserId { get; set; } 

    public string Username { get; set; } 

    public Team Team { get; set; } 

    public int TeamId { get; set; } 
} 

我做了簡單的演示控制檯應用程序,將用戶插入到數據庫然後得到它的主鍵來確保外鍵在數據庫中。

static void Main(string[] args) 
    { 
     var test = new InsertTest(); 
     var userId = test.InsertUser(); 
     test.InsertTeam(userId); 
    } 
public int InsertUser() 
    { 
     var user = new User(); 
     user.Username = "test1"; 
     user.Email = "[email protected]"; 
     user.Name = "test"; 
     user.LastName = "Test"; 
     user.Password = "123"; 
     user.ConfirmPassword = "123"; 
     UnitOfWork.UseRepository.Insert(user); 
     UnitOfWork.Save(); 

     var userdB = UnitOfWork.UseRepository.Get().Where(u => u.Name == "test").FirstOrDefault(); 

     return userdB.UserId; 
    } 

public void InsertTeam(int userId) 
    { 
     var team = new Team(); 

     team.Name = "Test"; 
     team.UserId = userId; 

     UnitOfWork.TeamRepository.Insert(team); 
     UnitOfWork.Save(); 
    } 

但是我仍然在將數據庫插入團隊時出現外鍵衝突。真的沒有任何想法下一步該怎麼做

唯一的例外是: INSERT語句衝突與外鍵約束「FK_dbo.Teams_dbo.Users_TeamId」。衝突發生在數據庫「幻想」,表「dbo.Users」,列'UserId'。 該聲明已被終止。

+0

你可以列出你的實際的異常?它應該有更多的細節可以幫助我們。 – Tim

+0

我將它添加到了問題 – Dolja

+0

您的模型在邏輯上不正確。一個團隊可以有很多用戶。有一對一的接球 – CodeNotFound

回答

0

改變你的團隊實體配置

HasOptional(c => c.User) 
      .WithRequired(c => c.Team) 
      .Map(m => m.MapKey("_field")); 

您可能還需要更改

public User User { get; set; } and 
public Team Team { get; set; } 

public virtual User User { get; set; } and 
public virtual Team Team { get; set; } 
+0

_field:表中關係字段的名稱 另外,我建議你重命名你的特性:Team.TeamId到Team.ID等 – FelipeDrumond

+0

用戶是團隊實體中必需的字段而團隊在用戶中是可選的,所以你確定HasOptional? – Dolja