c# - 在实体框架中的事务期间使用主键
问题描述
我正在创建几个模型,用“InsertAsync”插入它们,最后我用实体框架核心保存更改。
我想做的是:
MasterDbContext.table1.AddAsync(object1);
var object2 = new table2()
{
Action = 1,
PrimaryRef = object1.primaryKey,
};
MasterDbContext.table2.AddAsync(object2);
但是那个值是空的,你知道我怎么能有第二个插入值?
我的意思是,如果它们被一一执行,实体框架应该能够映射值,如果是这样,有人知道怎么做吗?谢谢。
*** 更新
基本上使它更简单:
我有一个 foreach 循环,其中在table1和table2中添加(不保存)几个对象。
在同一个循环中,我必须记录table3中两个表的主键(两个不同的行)
然后在最后保存所有内容。
我怎样才能让 EF 知道使用这些主键?
解决方案
您需要在实体框架中定义两个数据库对象之间的外键关系。
因此,在您的第二个实体(table2)上,您必须添加
[ForeignKey("PrimaryRefId")] public table1 PrimaryRef { get; set; }
在您的表 1 中,做一个参考:
public Collection<table2> SecondaryObjects { get; set; }
现在 EntiryFramework知道这些表是相关的,您可以利用该关系。
var t2 = new Table2 { Name = "Stuff child" };
var t1 = new Table1 { Name = "Stuff", PrimaryRef = t2 };
MasterDbContext.table1.AddAsync(t1);
推荐阅读
- java - 使用 Future 和 @Aync 时休眠两个打开的会话
- wordpress - WordPress - Ultimate Member - 允许对一个角色进行特定的个人资料字段编辑,而不允许对另一个角色进行编辑
- swift - Swift 4 - MQTT 不断接收消息
- django - 姜戈。使用 .all() 查询从相关表中获取值,无需重新查询数据库
- networking - 在这种情况下我应该使用 UDP 还是 TCP?
- python-3.x - 在 Python 中实现感知器算法时遇到问题
- python-3.x - 使用 BioPython 将 FASTA seq_ID 替换为 dict 中的新 ID
- android - Flutter/cloud-firestore“任务已经完成”异常
- javascript - RegExp 后向断言替代方案
- typescript - 在 snapshot.forEach 循环中检索数据