Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nhibernate 我应该让ORM直接填充DTO吗?_Nhibernate_Design Patterns_Orm - Fatal编程技术网

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

Nhibernate 我应该让ORM直接填充DTO吗?,nhibernate,design-patterns,orm,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; } } publ

我应该直接将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);
    }

}
公共类产品
{
公共虚拟int ProductId{get;set;}
公共虚拟字符串ProductCode{get;set;}
公共虚拟字符串ProductName{get;set;}
公共虚拟类别{get;set;}
}
公共类ProductMap:ClassMap
{
公共产品地图()
{
Id(x=>x.ProductId);
Map(x=>x.ProductCode);
地图(x=>x.ProductName);
参考文献(x=>x.Category)。列(“CategoryId”);
}
}
公共类产品
{
公共虚拟int ProductId{get;set;}
公共虚拟字符串ProductCode{get;set;}
公共虚拟字符串ProductName{get;set;}
公共虚拟int类别ID{get;set;}
}
公共类ProductDtoMap:ClassMap
{
公共产品地图()
{
表(“产品”);
Id(x=>x.ProductId);
Map(x=>x.ProductCode);
地图(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);
    }

}
公共操作结果输入()
{
返回视图(newproductdto());
}
公共操作结果编辑(int id)
{ 
使用(var s=SessionFactoryBuilder.GetSessionFactory().OpenSession())
{
返回视图(“输入”,s.Get(id));
}
}
//拯救
[HttpPost]
公共行动结果输入(ProductDto p)
{
if(ModelState.IsValid)
{
使用(var s=SessionFactoryBuilder.GetSessionFactory().OpenSession())
{
s、 合并(p);
s、 冲洗();
}
返回操作(“索引”);
}
其他的
{
返回视图(p);
}
}
我只想说,我想要方便,我想要直接将DTO持久化到数据库中,并直接将它们检索回来

现在,如果我只对CRUD使用ProductDto,我对Product类有什么需要?我只将Product类用于报告:-)


直接从ORM填充DTO并将其直接保存回ORM是一种良好的做法吗?

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