c# - 使用查找表中的 Id 创建新的数据库条目
问题描述
要创建一个new BaseClass
我只想分配 IdC2NumberId
和C1NumberId
.
数据结构:
[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 分配给C2NumberId
or C1NumberId
,而不加载整个对象。
它应该如何看起来正确?
解决方案
推荐阅读
- c++ - 如何在 if constexpr 逻辑中使用静态断言?
- python - 如何在 django 的序列化器字段中设置上下文值?
- java - java.lang.NoSuchFieldError:graphql/schema/idl/ScalarInfo.STANDARD_SCALAR_DEFINITIONS
- php - Php doc:键入一个字符串类名,该类名将始终实现给定的接口
- delphi - 过滤 ADOTable 错误 - “无法将 Null 类型转换为 OleStr 类型”
- uiscrollview - 在添加新项目视图 SwiftUI 中显示选定的 ScrollView 项目
- c# - 将命名空间加载到 OPC UA 服务器 c#
- driverkit - IOBufferMemoryDescriptor 是否应该被释放?
- python - 如何从 Numpy 数组中删除基于多列条件的行?
- python - 提高当前 multiprocessing.Pool() 的速度