【发布时间】:2014-07-22 19:06:18
【问题描述】:
我将 EntityFramework.dll 4.4 版与 .NET 4.0 一起使用。我有一个实体,其中包含对另一个实体的引用,如下所示:
[Table("Bar")]
public class Bar
{
public string Id { get; set; }
public Foo Foo { get; set; }
[ForeignKey("Foo")]
public string FooId {get; set; }
}
当我想在数据库中添加一个新的“Bar”记录时,EntityFramework 会尝试添加一个“Foo”的实例,但我不希望它这样做。 有没有办法告诉 EF 在创建 Bar 时忽略 Foo 实体?我不想在 Foo 上设置 [NotMapped] 因为它确实需要映射 -只是我不想保存它。所以我希望以下工作:
public void CreateBar(Bar b)
{
_barContext.Bars.Add(b);
// This function doesn't exist, but I would like it to exist
_barContext.Exclude("Foo");
_barContext.SaveChanges();
}
【问题讨论】:
-
不确定答案,但首先您需要将 FooId 设为可为空。
-
你怎么知道'EntityFramework 也试图添加一个“Foo”'的实例?
-
@haim770,我正在使用 EF Profiler,并且在 Foo 表中也遇到了唯一键违规。因为它试图插入一个已经存在的 Foo。
-
想一想,你确定这两个实体是正确的方法吗? IE 如果一个 Foo 总是有一个 Bar,但一个 Bar 可能有也可能没有 Foo,则外键应该是 Foo 实体中的 BarId,Bar 内有一个虚拟 Foo。
-
保存对 foo 的引用将 foo 设置为 null 保存 bar 并将 foo 属性重置为之前保存的引用,或者您可以手动将实体状态重置为未更改/分离。
标签: c# entity-framework