简体   繁体   English

代码首先是外键冲突

[英]Code first foreign key conflict

These are my two simplified entities 这些是我的两个简化实体

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

    public string Name { get; set; }

    public User User { get; set; }

    public int UserId { get; set; }
}

Team entity configuration: 团队实体配置:

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

The User class : 用户类:

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

    public string Username { get; set; }

    public Team Team { get; set; }

    public int TeamId { get; set; }
}

I made simple demo console application which inserts user to db then get it's primary key to make sure that foreign key is in databse. 我做了一个简单的演示控制台应用程序,它将用户插入到db然后获取它的主键,以确保外键是数据库。

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 = "aaa@mail.hr";
        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();
    }

But still I get foreign key conflict while inserting team in database. 但是在数据库中插入团队时我仍然会遇到外键冲突。 Really don't have any idea what to do next 真的不知道接下来该做什么

The exception is: The INSERT statement conflicted with the FOREIGN KEY constraint "FK_dbo.Teams_dbo.Users_TeamId". 例外情况是:INSERT语句与FOREIGN KEY约束“FK_dbo.Teams_dbo.Users_TeamId”冲突。 The conflict occurred in database "Fantasy", table "dbo.Users", column 'UserId'. 冲突发生在数据库“Fantasy”,表“dbo.Users”,列“UserId”中。 The statement has been terminated. 该语句已终止。

change your Team entity configuration to 将您的团队实体配置更改为

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

You might also need to change 您可能还需要更改

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

to

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM