2012-02-29 1 views
1

я в проекте простое подключение к базе данных:Как подключить nhibernate к локальному SQLEXPRESS?

public static string GetConnectionString() 
     { 
      return @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + HttpContext.Current.Request.PhysicalApplicationPath + "Application.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";    
     } 

Теперь я пытаюсь реализовать NHibernate проекта.

hibernate.cfg.xml здесь:

<?xml version="1.0" encoding="utf-8"?> 
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory>   
    <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory,NHibernate.ByteCode.Castle</property> 
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>  
    <property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property> 
    <property name="connection.connection_string">Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\1\Desktop\Application+\Application\Application.mdf;Integrated Security=True;User Instance=True</property>  
    <property name="dialect">NHibernate.Dialect.MySQL5Dialect</property>  
    <property name="show_sql">true</property> 
    </session-factory> 
</hibernate-configuration> 

Тестовые класс "Клиенты" объект здесь:

public class Clients 
    { 
     private Guid id; 
     private string name; 
     private string phone; 
     private string fax; 
     private string email; 
     private string address; 
     private string contactPerson; 

     public virtual Guid Id 
     { 
      get { return id; } 
      set { id = value; } 
     } 

     public virtual string Phone 
     { 
      get { return phone; } 
      set { phone = value; } 
     } 

     public virtual string Fax 
     { 
      get { return fax; } 
      set { fax = value; } 
     } 

     public virtual string Email 
     { 
      get { return email; } 
      set { email = value; } 
     } 

     public virtual string Address 
     { 
      get { return address; } 
      set { address = value; } 
     } 

     public virtual string ContactPerson 
     { 
      get { return contactPerson; } 
      set { contactPerson = value; } 
     } 

     public virtual string Name 
     { 
      get { return name; } 
      set { name = value; } 
     } 
    } 

Clients.hbm.xml здесь:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="WrapperObjects" namespace="WrapperObjects"> 
    <class name="Clients" table="Clients" lazy="false"> 
    <id name="Id" column="id"> 
     <generator class="native"></generator> 
    </id> 
    <property name="Name" column="name" type="System.String"/> 
    <property name="Phone" column="phone" type="System.String"/> 
    <property name="Fax" column="fax" type="System.String"/> 
    <property name="Email" column="email" type="System.String"/> 
    <property name="Address" column="address" type="System.String"/> 
    <property name="ContactPerson" column="contactPerson" type="System.String"/>  
    </class> 
</hibernate-mapping> 

Я использовал его например:

public static void Configure() 
     {    
      sessions = new Configuration().Configure().AddClass(typeof(Clients)).BuildSessionFactory(); 
     } 

     public static void Insert(Clients pb) 
     {    
      using (ISession session = sessions.OpenSession())    
      using (ITransaction tx = session.BeginTransaction()) 
      {     
       session.Save(pb);     
       tx.Commit(); 
      } 
     } 

На Configure() метод появляется сообщение об ошибке: Ключевое слово не supported.Parameter имя: attachdbfilename Как исправить ??))

ответ

2
<?xml version="1.0" encoding="utf-8"?> 
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory>   
    <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory,NHibernate.ByteCode.Castle</property> 
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>  
    <property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property> 
    <property name="connection.connection_string">Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\1\Desktop\Application+\Application\Application.mdf;Integrated Security=True;User Instance=True</property>  
    <property name="dialect">NHibernate.Dialect.MySQL5Dialect</property>  
    <property name="show_sql">true</property> 
    </session-factory> 
</hibernate-configuration> 

Уведомление вы используете driver_class NHibernate.Driver.MySqlDataDriver и NHibernate.Dialect.MySQL5Dialect диалекте, вы должны изменить его на:

<?xml version="1.0" encoding="utf-8"?> 
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory>   
    <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory,NHibernate.ByteCode.Castle</property> 
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>  
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property> 
    <property name="connection.connection_string">Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\1\Desktop\Application+\Application\Application.mdf;Integrated Security=True;User Instance=True</property>  
    <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property> 
    <property name="show_sql">true</property> 
    </session-factory> 
</hibernate-configuration> 

Я предположил, что вы используете MSSQL 2008, изменение NHibernate.Dialect.MsSql2005Dialect, если вы используете 2005

https://community.jboss.org/wiki/DatabasesSupportedByNHibernate?_sscc=t

0

вы пробовали строку соединения без User Instance http://social.msdn.microsoft.com/Forums/en/sqldataaccess/thread/60889070-5c3c-4823-ae9f-1ed6e32b2ce8

пример:

Server=.\SQLExpress;AttachDbFilename=c:\mydbfile.mdf;Database=dbname; Trusted_Connection=Yes; 

источник: http://www.connectionstrings.com/sql-server-2005

Чтобы использовать User Instance Func вам необходимо включить его на SQL Server. Это делается путем выполнения следующей команды: sp_configure «пользовательские экземпляры включены», «1».

, так как путь может быть абсолютным или относительным, вы можете также попробовать:

Data Source=.\SQLEXPRESS;AttachDbFilename=Application.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True 

или

Data Source=.\SQLEXPRESS;AttachDbFilename=Application.mdf;Integrated Security=True;Connect Timeout=30 
0

Вы используете MySqlDataDriver в качестве connection.driver_class в вашей конфигурации NH. Установите вместо этого NHibernate.Driver.SqlClientDriver.

Аналогично, установить диалект в NHibernate.Dialect.MsSql2008Dialect