【问题标题】:How to connect the field with another field in one table?如何将一个字段与一个表中的另一个字段连接起来?
【发布时间】:2012-05-23 14:35:30
【问题描述】:

我先用模型。

实体:

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();

我得到错误:

INSERT 语句与 FOREIGN KEY SAME TABLE 冲突 约束“User_ReferrerUser”。数据库发生冲突 “Kamikaze”,表“dbo.Users”,列“UserId”。该声明已 终止。

我做错了什么?

【问题讨论】:

    标签: c# entity-framework ef-code-first


    【解决方案1】:

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

    您还需要将HasRequired 更改为HasOptional 以使模型意识到可能没有RefererUser。

    有关在代码中设置可选链接的详细信息,请参阅this answer。

    【讨论】:

    • 我收到错误“无法将值 NULL 插入到列 'ReferrerUserId'、表 'Kamikaze.dbo.Users';列不允许空值。插入失败。语句已终止。”跨度>
    • @simplydenis 显然,这就是问题所在:您需要将ReferrerUserId 设为可空,重新生成您的 DDL,并使用它来修改您的数据库架构。
    • 我检查了数据库。确定ReferrerUserId不能为空
    • @simplydenis 你知道如何使它在数据库中可以为空吗?
    • 我删除了链接,并将分辨率设为空。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    相关资源
    最近更新 更多