C# NHibernate:如何为模型调用存储过程和单/复数?

C# NHibernate:如何为模型调用存储过程和单/复数?,c#,nhibernate,nhibernate-mapping,C#,Nhibernate,Nhibernate Mapping,有谁能告诉我使用NHibernate调用存储过程的最佳推荐方法吗 我已经设置了映射,目前正在运行 var list = session.CreateSQLQuery("exec usp_Test").AddEntity(typeof(Product)).List<Product>(); var list=session.CreateSQLQuery(“exec usp_Test”).AddEntity(typeof(Product)).list(); 毫无疑问,我得到了我的产品

有谁能告诉我使用NHibernate调用存储过程的最佳推荐方法吗

我已经设置了映射,目前正在运行

 var list = session.CreateSQLQuery("exec usp_Test").AddEntity(typeof(Product)).List<Product>();
var list=session.CreateSQLQuery(“exec usp_Test”).AddEntity(typeof(Product)).list();
毫无疑问,我得到了我的产品列表,但这是最好的方法吗

还有模型类,即产品最好设置为单数或复数(产品)


事先谢谢你

不太感谢。通常,如果您使用的是nHibernate,则允许它为您生成查询。并不是说你所做的事情有什么问题,而是你这样做是在欺骗自己,使自己失去了nHibernate的一些用处。如果我是你,我会研究通过使用criteria对象来收集对象。

不太可能。通常,如果您使用的是nHibernate,则允许它为您生成查询。并不是说你所做的事情有什么问题,而是你这样做是在欺骗自己,使自己失去了nHibernate的一些用处。如果我是你,我会研究通过使用criteria对象来收集对象。

我建议尽可能避免使用NHibernate的存储过程

可能仍然有理由使用存储过程。因此,有几种方法可以将它们与NHibernate一起使用

直接将它们作为查询调用(就像您所做的那样),将它们指定为预定义查询,甚至可以将它们定义为NHibernate选择、插入或更新实体的方式

在映射文件中有一个如何使用存储过程的问题

代码中有一个如何调用它们的方法

关于您的代码:

  • AddEntity
    不添加类型,而是添加实体实例。它实际上是转到它的主键
  • 存储过程不能真正提供产品列表。只有NHibernate(ORM)能够从数据库中读取对象。调用存储过程时,直接转到数据库

我不明白关于单数和复数的最后一句话。这是另一个问题吗?

我建议尽可能避免使用NHibernate存储过程

可能仍然有理由使用存储过程。因此,有几种方法可以将它们与NHibernate一起使用

直接将它们作为查询调用(就像您所做的那样),将它们指定为预定义查询,甚至可以将它们定义为NHibernate选择、插入或更新实体的方式

在映射文件中有一个如何使用存储过程的问题

代码中有一个如何调用它们的方法

关于您的代码:

  • AddEntity
    不添加类型,而是添加实体实例。它实际上是转到它的主键
  • 存储过程不能真正提供产品列表。只有NHibernate(ORM)能够从数据库中读取对象。调用存储过程时,直接转到数据库

我不明白关于单数和复数的最后一句话。这是另一个问题吗?

谢谢!是的,关于单数或复数。。我创建的实体类(映射文件指向的实体类)当前为单数,即PRODUCT(无s)我认为这是推荐的方式,或者实体应为复数,即PRODUCTS(注意s)@Martin:类始终为单数,复数表示它是容器或集合类型。表名通常是复数的,但就我个人而言,我打破了这个传统,把表称为与类相同的名称。谢谢!是的,关于单数或复数。。我创建的实体类(映射文件指向的实体类)当前为单数,即PRODUCT(无s)我认为这是推荐的方式,或者实体应为复数,即PRODUCTS(注意s)@Martin:类始终为单数,复数表示它是容器或集合类型。表名通常是复数,但就我个人而言,我打破了这一传统,将表称为与类相同的名称。