我们可以使用实体框架保存工作对象吗?



在许多实体框架示例中,存储在数据库中的对象表示为:

public class Animal {
public int Id {get; set;}
public string Name {get; set;}
public int Age {get; set;}
//...
}

如果我想使用实体框架不仅类的一组属性/字段和一些小方法,而且还写大的成熟对象的字段通过它到数据库,与程序将工作,例如:

public class Animal : BaseObject {
public int Id {get; set;}
public string Name {get; set;}
public int Age {get; set;}
//...
public void voice() { /*...*/ }
public void func1() { /*...*/ }
public int func2() { /*...*/ }
//И т.д.
}

实体框架是设计用于处理具有复杂逻辑和继承的类,还是应该制作纯粹用于处理数据库的类?
例如:

数据库类
public class DBAnimal {
public int Id {get; set;}
public string Name {get; set;}
public int Age {get; set;}
//И т.д...
}

工人阶级

public class Animal : BaseObject {
public int Id {get; set;}
public string Name {get; set;}
public int Age {get; set;}
//И т.д...

public Animal(DBAnimal dbAnimal) {
this.Id = dbAnimal.Id;
this.Name = dbAnimal.Name;
this.Age = dbAnimal.Age;
}    
public void voice() { /*...*/ }
public void func1() { /*...*/ }
public int func2() { /*...*/ }
//И т.д.
}

还有第二个问题:如果您仍然使用Entity框架来处理成熟的类,那么是否存在某种注释,使NotMapped类的所有字段在默认情况下生效,而Mapped类型的注释将应用于所需的字段?

实体框架确实支持继承,所以您可能可以这样做。更好的问题是,你应该这样做吗?

领域驱动设计(DDD)的一个原则认为存储模型应该从领域模型中分离出来。参见域模型与数据库模型不同吗?

主要的论点是适合存储的模型可能不适合使用模型,反之亦然。例如,您可能会发现,为了获得所需的性能,您需要一些数据库无法容纳的优化搜索结构。

另一个常见的问题是,模型可能会改变,但您仍然需要处理旧数据。如果需要的话,拥有一个存储模型可以为转换代码提供一个方便的位置。您甚至可能有多个存储模型。拥有一个简单的基于文件的存储对于诸如测试之类的事情来说非常方便。

最新更新