【发布时间】:2012-08-30 07:09:33
【问题描述】:
我看到很多关于首先使用 EF 代码和 POCO 的示例,这些示例显示如下:
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public virtual Blog Blog { get; set; }
}
现在,查看Blog 属性。不应该是这样吗:
private Blog blog;
public virtual Blog Blog
{
get
{
return blog;
}
set
{
blog = value;
if (blog != null)
{
BlogId = blog.BlogId;
}
}
}
我的意思是,既然你已经用外键“污染”了你的模型,你不应该至少让它与参考保持同步吗?或者,无论如何在读取数据时都不应该依赖BlogId(例如,您想知道特定的BlogId 是否在列表中)。或者DbContext(如KeepForeingKeysPropertiesSyncronizedWithReferences)上可能有一个神奇的属性对我有这种作用,而我是唯一对此感到担忧的可悲程序员?还是我偏执? (另外,对不起我的英语不好)
编辑
很抱歉——这真是一个愚蠢的问题。 Stefan 是对的,EF 确实为您做到了这一点。我没有看到这个,因为我传递的引用加载了AsNoTracking()。只有在这种情况下,您才会有一个带有 ID 的引用,并且外键字段将为 0。只要您传递一个已经在上下文中的引用,它应该可以工作。
【问题讨论】:
-
不了解 EF,但如果您使用 NHibernate,您根本不会放入 BlogId 属性。
-
我认为有可能使用 BlogId 很好,所以我不需要博客引用并且仍然可以保存关联。我只是对保持同步感到困惑-对我来说,这看起来很明显,但我从未见过有人这样做,所以也许我错了:/
标签: entity-framework entity-framework-4.1 ef-code-first entity-framework-5