首页 > 解决方案 > 使用查找表中的 Id 创建新的数据库条目

问题描述

要创建一个new BaseClass我只想分配 IdC2NumberIdC1NumberId.

数据结构:

[Table("BaseClass")]
public class BaseClass
{
    [Key]
    public Guid Id { get; set; }
    public string SomeProperty { get; set; }

    [ForeignKey("C1")]
    public int C1NumberId { get; set; }
    public virtual C1 C1 { get; set; }


    public BaseClass()
    {
        Id = Guid.NewGuid();
        C1 = new C1();
    }
}


[Table("C1")]
public class C1
{
    [Key]
    public int C1NumberId { get; set; }
    public string C1Name { get; set; }

    [ForeignKey("C2")]
    public int C2NumberId { get; set; }
    public virtual C2 C2 { get; set; }


    public C1()
    {
        C2 = new C2();
    }

}

[Table("C2")]
public class C2
{
    [Key]
    public int C2NumberId { get; set; }
    public string C2Name { get; set; }
}

数据库架构:

这里

访问 DBContext:

using (XDBTestingContext db = new XDBTestingContext())
{ 
    BaseClass bc = new BaseClass();

    bc.C1NumberId = 1;// I already have that Id, table is just for look up 
    bc.SomeProperty = "dksal";

    bc.C1.C1NumberId = 1; // I already have that Id, table is just for look up 
    bc.C1.C2.C2NumberId = 1; // I already have that Id, table is just for look up 

    db.BaseClass.Add(bc);
    //db.BaseClass.Entry(bc).State = EntityState.Detached;
    //db.BaseClass.Entry(bc).State = EntityState.Modified;
    db.SaveChanges();
}   

错误:

“无法跟踪实体类型“C2”的实例,因为已经在跟踪具有相同键值 {'C2NumberId'} 的另一个实例。附加现有实体时,请确保仅附加一个具有给定键值的实体实例。考虑使用

我读过我必须改变状态(看看我的评论),但它似乎不起作用。实际上我只想将现有的 Id 分配给C2NumberIdor C1NumberId,而不加载整个对象。

它应该如何看起来正确?

标签: c#sqlentity-framework-coreentity-relationship

解决方案


推荐阅读