如何将该字段与一个表中的另一个字段连接

本文关键字:字段 一个 连接 另一个 | 更新日期: 2023-09-27 18:35:02

我先使用模型。

实体:

class User
{
Guid UserId{get;set;}
Guid RefererUserId {get;set;}
User RefereUser {get;set;}
}

数据上下文:

public class DataContext : DbContext
    {
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<User>()
                .HasRequired(x => x.ReferrerUser)
                .WithMany()
                .HasForeignKey(x => x.ReferrerUserId).WillCascadeOnDelete(false);
        }
 public DbSet<User> Users { get; set; }
}

我启动数据库:

MembershipCreateStatus Status;
Membership.CreateUser("Demo", "123456", "demo@demo.com", null, null, true, out Status);
Roles.CreateRole("Admin");
Roles.AddUserToRole("Demo", "Admin");
DataContext db = new DataContext();
var a = db.Users.Where(x => x.Email == "demo@demo.com").FirstOrDefault();
a.MoneyRUB = 100;
a.MoneyUSD = 100;
db.SaveChanges();

我收到错误:

插入语句与外键同一表冲突 约束"User_ReferrerUser"。数据库中发生冲突 "神风敢死队",表"dbo。用户",列"用户 ID"。该声明已被 终止。

我做错了什么?

如何将该字段与一个表中的另一个字段连接

尝试将RefererUserId设置为可为空(即 Guid?,不是Guid(。否则,将无法插入第一个用户。

您还需要将HasRequired更改为HasOptional,以使模型知道可能没有RefererUser的事实。

有关首先在代码中设置可选链接的详细信息,请参阅此答案。