2016-04-29 89 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