首页 > 解决方案 > 在实体框架中的事务期间使用主键

问题描述

我正在创建几个模型,用“InsertAsync”插入它们,最后我用实体框架核心保存更改。

我想做的是:

MasterDbContext.table1.AddAsync(object1);

var object2 = new table2()
            {
                Action = 1,
                PrimaryRef = object1.primaryKey,
            };

MasterDbContext.table2.AddAsync(object2);

但是那个值是空的,你知道我怎么能有第二个插入值?

我的意思是,如果它们被一一执行,实体框架应该能够映射值,如果是这样,有人知道怎么做吗?谢谢。

*** 更新

基本上使它更简单:

我有一个 foreach 循环,其中在table1table2中添加(不保存)几个对象。

在同一个循环中,我必须记录table3中两个表的主键(两个不同的行)

然后在最后保存所有内容。

我怎样才能让 EF 知道使用这些主键?

标签: c#asp.netentity-frameworkentity-framework-core

解决方案


您需要在实体框架中定义两个数据库对象之间的外键关系。

因此,在您的第二个实体(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);

推荐阅读