开发者

Should I let the ORM directly populate the DTOs?

开发者 https://www.devze.com 2023-02-27 18:34 出处:网络
and should I save the DTOs directly to the database? public class Product { public virtual int ProductId { get; set; }

and should I save the DTOs directly to the database?

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 =&g开发者_如何学编程t; x.CategoryId);
    }

}

Here's how I create, open and save record:

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);
    }

}

Suffice to say, I wanted convenience, I want to persist the DTOs directly to database, and retrieve them back directly too.

Now what need do I have for Product class if I just use ProductDto exclusively for CRUD? I'll just use Product class for reporting only :-)

Is populating DTOs directly from ORM and saving them back directly to ORM a sound practice?


Yes if you can do it, it's the best way. Don't feel guilty about it :)

0

精彩评论

暂无评论...
验证码 换一张
取 消