c# - EF4 ObjectContext.EntitySet.AddObject() 级联插入

标签 c# entity-framework-4

如何通过 EF4 将实体添加到数据库而不首先附加其所有引用的实体?

var entity = new MyEntity() { FK_ID = 4 }; // associated entity key

using (var db = new MyEntities())
{
    db.MyEntity.AddObject(entity);

    db.SaveChanges();
    db.AcceptAllChanges();
}

此代码不断尝试同时插入一个新的默认值 FK_Entity。

我在网上看到一些建议,我需要先附加 FK_Entity,然后将 MyEntity.FK 属性设置为附加的 FK_Entity,但这看起来很糟糕。 1) 我假设附加需要加载 FK_Entity,我不需要只插入实体 - 我已经给了它正确的 key ,如果我犯了错误,SQL 将强制执行参照完整性。 2) 由于我有更多的引用文献,我必须附上每一个吗??

我找不到任何用于抑制级联插入的选项或重载。我一定是想错了?

谢谢。

最佳答案

您可以尝试做的是创建“虚拟”FK 实体,每个实体仅设置 ID 属性。并确保它们在 ObjectStateManager 中有 EntityStatus.Unchanged,这样 EF 就不会尝试“更新”和重写 FK 实体的所有其他属性。

我没有机会对此进行测试,但大致如下:

var fkEntity = new FK_Entity { ID = 4 };
var entity = new MyEntity { FK_Entity = fkEntity };

using (var db = new MyEntities())
{
    db.AddToEntities(entity);
    ObjectStateEntry fkEntry = db.ObjectStateManager.GetObjectStateEntry(fkEntity);
    // You can check the state here while debugging, but it's probably `Added`
    fkEntity.ChangeState(EntityState.Unchanged);

    db.SaveChanges();
}

关于c# - EF4 ObjectContext.EntitySet.AddObject() 级联插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4049637/

相关文章:

c# - 通过 .NET 确定每个查询的 DocumentDB 请求费用

c# - 具有异步服务初始化的竞争条件

c# - 查询 ObjectContext 中的派生实体(每个层次结构一个表)

entity-framework-4 - 我可以使用Entity Framework 4 CTP5访问TPH映射中的鉴别符值吗

c# - 如何实现类似 Exchange 的内部 SQL Server 可用性监控

c# - 如何在 C# 中将类型为 `object` 的变量转换为具有泛型类型的类?

c# - Entity Framework 4.0 CTP5 一对一映射

c# - 将 AutoMapper 与 WCF 数据服务和 EF4 集成的最佳实践

c# - 在sql server数据库中存储不同语言的字符串必须考虑什么?

c# - 满足此要求的 WPF 控件或方法是什么?