【发布时间】:2013-06-20 22:24:21
【问题描述】:
我遇到了实体框架中的映射问题。
我有以下课程(简化):
public class Building
{
public int ID { get; set; }
// *.. snip..* other properties
public Location Location { get; private set; }
}
public class Location
{
public string Street {get; set;}
public Country country {get; set}
}
public class Country
{
public int ID { get; set; }
public string Name { get; set; }
}
Building 和 Country 是实体,它们保存在数据库中。 Location 是一个值类型,应该映射到与 Building 相同的表。
但是,当我以这种方式映射它时,实体框架也想将 Location 映射到一个表并且抱怨它没有 Key。我不想给它钥匙,因为它属于大楼,根本不应该是一个实体。
我看到过一些变通方法,说您需要将 Country 放在 Building 类中,但这感觉不太好(并且在语义上完全是错误的)。
我正在使用实体框架 5
【问题讨论】:
-
您正在寻找complex types。
-
是的,我知道,问题是一旦复杂类型引用了实体,EF 也想将复杂类型放入表中
-
真是个好问题。实际上,我通常把重点放在域逻辑上,我根本不关心 ORM 如何持久化数据(因此我不会认为在 Location 中添加 Id 列是一个大问题)。如果我真的必须关心数据的存储方式,我会考虑不将域对象与 ORM 实体混合,通过创建一个特定的层来持久化(创建实体来参与 ORM),尽管这可能会使架构更加复杂。如果您得出结论,请告诉我们,也许 CQRS 可以解决这个问题。
-
是的,最后,我刚刚摆脱了 EF。没有 ORM 更简单:-)
-
您可以使用 NHibernate 代替 EF。在这里你可以做这些事情。
标签: c# .net entity-framework entity-framework-5