DAL Datamapper持久化胖对象

时间:2010-10-26 20:00:35

标签: c# .net winforms

我正在重写我们的应用程序。我们正在构建DataMappers以在我们的DAL中工作。我的问题涉及到我从BLL获得一个复杂对象的情况,该对象被传递给DataMapper以被持久化。

假设这个对象有很多属性,包括其他对象的列表。

...即

public class Customer
{
    public String name;
    public String age;
    public String ShoeSize;
    public List<Address> a;
    public List<Orders> o;
{

在可能“年龄”是BLL中更新的唯一字段的情况下。

将此持久保存到数据库有什么好的做法?

你会坚持整个结构吗?或者我如何构造这个,以便我的DataMapper知道哪些字段已更改,以便我不必更新数据库中的整个结构?我想我可以为每个属性设置某种IsDirty字段,但这可能会很快变得混乱。

谢谢,

MW

2 个答案:

答案 0 :(得分:1)

如果将原始对象保留在内存中并传入带有更改的新“版本”,则可以检查新对象的更改并仅保存该对象。

public class CustomerMapper {
    // ...
    public void Update(Customer original, Customer update)
    {
        // check each property for changes
    }
    // ...
}

更新后,用新的替换原始对象。但是如果你有多个线程,请注意并发问题。

答案 1 :(得分:0)

为什么重新发明轮子?我已经做了几个数据层,这不值得麻烦。在使用现有的ORM时,所有这些问题(以及许多您未曾想到的)已经得到了解决。

我最喜欢的是 nhibernate 。它可以为您提供大量功能,也可以通过几乎为零的配置来修复所有功能。

看这里: