我将 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/