c# - 如何让EF按照正确的顺序执行插入查询?

标签 c# sql mysql entity-framework

我将 Entity Framework 与 MySQL 服务器一起使用,因为我希望能够再次对我的 MySQL 数据库进行良好且简单的 LINQ 查询。 我有一个非常简单的问题,但我很沮丧,因为我不敢相信 EF 犯了如此可怕的错误。

为了简化,我有父类和子类,并且我想在一个事务中执行两次插入。

为了证明:我有 A、B、C 和 D。 A 是 B 和 C 的父级,B 和 C 是 D 的父级(需要这样)。

我执行以下操作:

B b = new B() { B_ID = 1 };
A.Bs.Add(b);
C.Ds.Add(new D() { B_ID = b.B_ID } );

我这样做是因为所有这些实际上都发生在 C 类中。 为什么我收到 UpdateException(“...”中的实体参与“BD”关系。找到 0 个相关“B”。预计有 1 个“B”)?因为当我省略最后一个命令(插入 D,B 的子级)时,它工作得很好,并且当我之后发出插入时(即在新事务中),它也工作得很好。

难道 EF 会盲目地以随机顺序插入元素,但自己发现不可能吗?或者我是否以完全错误的方式处理这个问题?

EF 版本:我有 .NET FX 3.5 SP1,所以据我所知它是版本 1。

更新:非常抱歉,已将错误追溯到我犯的错误,所以现在错误不会发生在 EF 级别(除了我上面所说的异常(exception)),但实际上是一个 INSERT因为 chidl 元素已发送到数据库,我可以在日志中看到它。所以问题仍然存在,但异常不同(外键约束失败)。

感谢您的帮助, 迈克尔

(已编辑以回答评论)

最佳答案

b.B_ID 是否表示标识列(或数据库自动生成的其他 ID)?如果是这样,那么在插入操作发生之前它不会有可用的值。在这种情况下,您必须使用对象引用而不是数据库标识符来设置关系的一侧。

或者:

C.Ds.Add(new D() { B = b });

或者

b.Ds.Add(new D());

关于c# - 如何让EF按照正确的顺序执行插入查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3547468/

相关文章:

MySQL 可以根据提供的静态数据列表加入表吗?

php - mysql使用varchar类型进行数据搜索

mysql幽灵表

MySQL AS 关键字

c# - 将请求特定的对象从自定义身份验证过滤器共享到 Controller /模型

c# - 为什么 COM Interop 将 VB6 bool 值视为 C# 短整数?

mysql - SQL INNER JOIN 与 DISTINCT 行?

MySQL连接字段但忽略空字段

c# - 如何将这个使用 XPath 的简单 C# 方法转换为 Java 方法?

c# - 如果文本框为空,此代码返回日期 1-1-0001 ...我希望它返回空或空字符串,那么我该怎么办?