我对实体框架有点陌生,我有以下情况,我想在具有实体框架的数据库上继续使用:

public class Period
{
    public Period() { }
    public DateTime From { get; set; }
    public DateTime To { get; set; }
}

public class Class1
{
     public Period Validity {get; set;}
}

public class Class2
{
     public List<Period> Validities {get;set;}
}


我可以将Class1配置为复杂类型,并将其持久化,但是不能持久化Class2。
我可以坚持将Class2配置为实体作为Period,但是尝试添加Class1时Class1不起作用。

而且,Period不是实体,我不想将其视为实体,也不想在ID上放置ID,因为我的模型对此没有任何意义。这是一个结构,我已经必须使其成为一个类。

我想保持现有模型不变。
是否有解决方法或可以让我在较低级别定义映射的方法?

NHibernate 4可以吗?我准备将所有持久性层切换为nhibernate,如果值得的话!
有什么提示吗?

最佳答案

如果您试图将您的(非贫乏)域模型压缩到ORM中,那么您将始终不得不做出让步。因此,除了非常简单的应用程序之外,这通常不是一个好主意。

创建一个持久性模型,该模型由简单的,仅具有getter-setter的类组成,没有任何逻辑。使它们以适合EF的方式使用,并用于保留数据。现在将持久性模型映射到域模型,反之亦然。

这似乎有些过头,但是如果您真的想应用DDD,这是唯一的解决方案。尝试使两个模型保持紧密联系,以使映射很简单。 Automapper是用于此类模型间映射的好工具。

关于c# - Entity Framework :存储为复杂类型列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33296306/

10-09 19:22