Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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
Can';我似乎无法通过NHibernate从MySQL数据库中获取数据_Mysql_Nhibernate_Model View Controller - Fatal编程技术网

Can';我似乎无法通过NHibernate从MySQL数据库中获取数据

Can';我似乎无法通过NHibernate从MySQL数据库中获取数据,mysql,nhibernate,model-view-controller,Mysql,Nhibernate,Model View Controller,因此,我设置了一个MySQL数据库,其中包含一条记录的表。我的解决方案由三个项目组成(1个域模型库、测试库和我的Web项目)。在我的MVC项目中,我用所有必要的Dll实现了NHibernate,并且 在Web项目根目录中: nhibernate-configuration.xsd nhibernate-mapping.xsd nhibernate.config and <classname>.hbm.xml file - with the class it is mapping

因此,我设置了一个MySQL数据库,其中包含一条记录的表。我的解决方案由三个项目组成(1个域模型库、测试库和我的Web项目)。在我的MVC项目中,我用所有必要的Dll实现了NHibernate,并且

在Web项目根目录中:

nhibernate-configuration.xsd
nhibernate-mapping.xsd
nhibernate.config and 
<classname>.hbm.xml file - with the class it is mapping
然后我有一个BootStrapper类,它返回当前会话: 公共静态只读ISessionFactory SessionFactory=CreateSessionFactory()

我的控制器正被我的机器人递给我一个物体 ProductController.cs 公共类产品控制器:控制器 { 私有只读IProductsRepository productsRepository

    public ProductsController(IProductsRepository productsRepository)
    {
      this.productsRepository = productsRepository;
    }

    public ViewResult List()
    {
        return View(productsRepository.Products.ToList());
    }

}
NinjectControllerFactory.cs 公共类NinjectControllerFactory:DefaultControllerFactory { //提供对象实例 private IKernel kernel=新的标准内核(新的DaisyblossomsServices())

}

您将销售的呼叫我的服务类DaisyblossomsServices: 公共类DaisyBlossSomsServices:NinjectModule {

{ 公共卫生产品 { get{var session=BootStrapper.GetSession()

{ IQueryable产品{get;} }

作为附加信息,我的Product.hbm.xml文件映射了我的Product.cs类

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="Daisyblossoms.Domain"
                   namespace="Daisyblossoms">
      <class name="Product"
         table="product">
    <id name="ProductID">
      <generator class="assigned" />
    </id>
    <property name="Name" column="Name" />
    <property name="Price" column="Price" />
  </class>
</hibernate-mapping>

和我的nhibernate.config:

<?xml version="1.0"?>
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
  <session-factory name="Daisyblossoms.Domain">
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property>
    <property name="generate_statistics">true</property>
    <property name="current_session_context_class">web</property>
    <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory,     NHibernate.ByteCode.Castle</property>
    <property name="dialect">NHibernate.Dialect.MySQL5Dialect</property>
    <mapping assembly="Daisyblossoms.WebUI"/>
  </session-factory>
</hibernate-configuration>

NHibernate.Connection.DriverConnectionProvider
NHibernate.Driver.MySqlDataDriver
真的
网状物
NHibernate.ByteCode.Castle.proxyFactory,NHibernate.ByteCode.Castle
NHibernate.dialogue.mysql5dialogue
以及Web.config的my connectionsStrings部分:

<connectionStrings>
<add name="daisyblossoms" connectionString="Server=localhost;Port=3306;Database=dbName;Uid=user;Pwd=somePSWD;pooling=false;" 
 providerName="MySql.Data.MySqlClient"/>


有什么想法可能是我的问题吗?

请验证hibernate.cfg.xml是否已将输出设置为“更新时更新”而且你的*.hbm.xml文件被标记为嵌入式资源。这是两个最常见的错误。听起来你也在试图让很多移动部件同时工作。你可能想简化一些事情,只需要让一个控制台应用程序使用NHibernate连接到MySQL。类似如下:

internal class Program {
    private static void Main() {
        var cfg = new Configuration();
        cfg.Configure();  // Uses hibernate.cfg.xml by default.
        // cfg.Configure("nhibernate.config");  // Or use this overload if you prefer your own name.
        var sessionFactory = cfg.BuildSessionFactory();
        using(var session = sessionFactory.OpenSession())
        using(var tx = session.BeginTransaction()) {
            var query = session.CreateCriteria<Product>().List();
            query.ForEach(x => Console.WriteLine(x.Name));
            tx.Commit();
        }
        Console.WriteLine("Press <ENTER> to exit...");
        Console.ReadLine();
    }
}
内部类程序{
私有静态void Main(){
var cfg=新配置();
Configure();//默认情况下使用hibernate.cfg.xml。
//Configure(“nhibernate.config”);//如果您喜欢自己的名字,可以使用此重载。
var sessionFactory=cfg.BuildSessionFactory();
使用(var session=sessionFactory.OpenSession())
使用(var tx=session.BeginTransaction()){
var query=session.CreateCriteria().List();
query.ForEach(x=>Console.WriteLine(x.Name));
tx.Commit();
}
控制台。WriteLine(“按退出…”);
Console.ReadLine();
}
}

这将允许您验证映射和配置文件是否正确,而无需同时担心MVC、Ninject等。

噢,没有错误。很明显,它没有从数据库中检索任何记录来显示。很抱歉,遗漏了我的ASPX页面:我只是foreach(模型中的var产品)并显示product.Name以及product.Price.ToString(“c”),最后,如果我更改connectionString中的密码,它将出错并返回"该用户的访问被拒绝。因此,我假设它使用正确的凭据连接到数据库。问题在于它为什么不返回记录。cfg.xml是否与.config文件相同?我见过两个文件都被引用,但从未在同一个项目中出现过。如果您将配置文件命名为hibernate.cfg.xml,则当您不带任何参数调用cfg.Configure()。如果要为配置文件命名其他名称,则需要指定文件名。因此,是的,它们是相同的。
public class ProductsRepository : IProductsRepository
    return session.CreateCriteria(typeof(Product)).List<Product>().AsQueryable();

    }
}
 public interface IProductsRepository
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="Daisyblossoms.Domain"
                   namespace="Daisyblossoms">
      <class name="Product"
         table="product">
    <id name="ProductID">
      <generator class="assigned" />
    </id>
    <property name="Name" column="Name" />
    <property name="Price" column="Price" />
  </class>
</hibernate-mapping>
<?xml version="1.0"?>
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
  <session-factory name="Daisyblossoms.Domain">
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property>
    <property name="generate_statistics">true</property>
    <property name="current_session_context_class">web</property>
    <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory,     NHibernate.ByteCode.Castle</property>
    <property name="dialect">NHibernate.Dialect.MySQL5Dialect</property>
    <mapping assembly="Daisyblossoms.WebUI"/>
  </session-factory>
</hibernate-configuration>
<connectionStrings>
<add name="daisyblossoms" connectionString="Server=localhost;Port=3306;Database=dbName;Uid=user;Pwd=somePSWD;pooling=false;" 
 providerName="MySql.Data.MySqlClient"/>
internal class Program {
    private static void Main() {
        var cfg = new Configuration();
        cfg.Configure();  // Uses hibernate.cfg.xml by default.
        // cfg.Configure("nhibernate.config");  // Or use this overload if you prefer your own name.
        var sessionFactory = cfg.BuildSessionFactory();
        using(var session = sessionFactory.OpenSession())
        using(var tx = session.BeginTransaction()) {
            var query = session.CreateCriteria<Product>().List();
            query.ForEach(x => Console.WriteLine(x.Name));
            tx.Commit();
        }
        Console.WriteLine("Press <ENTER> to exit...");
        Console.ReadLine();
    }
}