我首先使用模型。
实体:
class User
{
Guid UserId{get;set;}
Guid RefererUserId {get;set;}
User RefereUser {get;set;}
}
的DataContext:
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();
我收到错误:
INSERT语句与FOREIGN KEY SAME TABLE冲突 约束“User_ReferrerUser”。冲突发生在数据库中 “Kamikaze”,表“dbo.Users”,列“UserId”。声明一直如此 终止。
我做错了什么?
答案 0 :(得分:0)
尝试使RefererUserId
可以为空(即Guid?
,而不是Guid
)。否则,将无法插入第一个用户。
您还需要将HasRequired
更改为HasOptional
,以使模型了解可能没有RefererUser
的事实。
有关在代码中首先设置可选链接的详细信息,请参阅this answer。