我应该让ORM直接填充DTO吗?

时间:2011-04-22 10:30:11

标签: nhibernate design-patterns orm

我应该将DTO直接保存到数据库吗?

public class Product
{
    public virtual int ProductId { get; set; }
    public virtual string ProductCode { get; set; }
    public virtual string ProductName { get; set; }
    public virtual Category Category { get; set; }
}

public class ProductMap : ClassMap<Product>
{
    public ProductMap()
    {
        Id(x => x.ProductId);
        Map(x => x.ProductCode);
        Map(x => x.ProductName);
        References(x => x.Category).Column("CategoryId");                
    }

}

public class ProductDto
{
    public virtual int ProductId { get; set; }
    public virtual string ProductCode { get; set; }
    public virtual string ProductName { get; set; }
    public virtual int CategoryId { get; set; }
}

public class ProductDtoMap : ClassMap<ProductDto>
{
    public ProductDtoMap()
    {
        Table("Product");
        Id(x => x.ProductId);
        Map(x => x.ProductCode);
        Map(x => x.ProductName);
        Map(x => x.CategoryId);
    }

}

以下是我创建,打开和保存记录的方法:

public ActionResult Input()
{
    return View(new ProductDto());
}

public ActionResult Edit(int id)
{ 
    using(var s = SessionFactoryBuilder.GetSessionFactory().OpenSession())
    {
        return View("Input", s.Get<ProductDto>(id));
    }
}


// Save
[HttpPost]
public ActionResult Input(ProductDto p)
{

    if (ModelState.IsValid)
    {
        using (var s = SessionFactoryBuilder.GetSessionFactory().OpenSession())
        {
            s.Merge(p);
            s.Flush();
        }
        return RedirectToAction("Index");
    }
    else
    {
        return View(p);
    }

}

我只想说,我想要方便,我想将DTO直接保存到数据库,并直接将它们检索回来。

如果我只使用ProductDto专门用于CRUD,那么我对Product类有什么需要?我只会使用Product类进行报告: - )

直接从ORM填充DTO并将它们直接保存回ORM是一种合理的做法吗?

1 个答案:

答案 0 :(得分:2)

是的,如果你能做到,这是最好的方法。不要为此感到内疚:)