объединение 2 таблицы с запросом - PullRequest
0 голосов
/ 14 октября 2011

У меня есть 3 таблицы в образце. я собираюсь присоединиться к 2 столу, но у меня есть проблема следующий мой код:

<?xml version="1.0"?>

</configSections>

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
    <property name="connection.connection_string">Server=(local);database=human;Integrated Security=SSPI;</property>
    <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
    <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
    <property name="show_sql">true</property>
  </session-factory>
</hibernate-configuration>

using System.Collections.Generic; 
using System.Text; 
using System; 


namespace human {

public class TblStudent {
    public TblStudent() { }
    public virtual int ID { get; set; }
    public virtual IList<TblTerm> TblTerms { get; set; }
    public virtual string name { get; set; }
    public virtual string lastname { get; set; }
}
}


using System; 
using System.Collections.Generic; 
using System.Text; 
using FluentNHibernate.Mapping;

namespace human {


public class TblStudentMap : ClassMap<TblStudent> {

    public TblStudentMap() {
        Table("TblStudent");
        LazyLoad();
        Id(x => x.ID).GeneratedBy.Identity().Column("ID");
        Map(x => x.name).Column("name");
        Map(x => x.lastname).Column("lastname");
        HasMany(x => x.TblTerms);
    }
}
}

using System.Collections.Generic; 
using System.Text; 
using System; 


namespace human {

public class TblTerm {
    public TblTerm() { }
    public virtual int ID { get; set; }
    public virtual TblLesson TblLesson { get; set; }
    public virtual TblStudent TblStudent { get; set; }
}
}

using System; 
using System.Collections.Generic; 
using System.Text; 
using FluentNHibernate.Mapping;

namespace human {


public class TblTermMap : ClassMap<TblTerm> {

    public TblTermMap() {
        Table("TblTerm");
        LazyLoad();
        Id(x => x.ID).GeneratedBy.Identity().Column("ID");
        References(x => x.TblLesson).Column("LessonID");
        References(x => x.TblStudent).Column("StudentID");
    }
}
}

using System; 
using System.Collections.Generic; 
using System.Text; 
using FluentNHibernate.Mapping;

namespace human {


public class TblTermMap : ClassMap<TblTerm> {

    public TblTermMap() {
        Table("TblTerm");
        LazyLoad();
        Id(x => x.ID).GeneratedBy.Identity().Column("ID");
        References(x => x.TblLesson).Column("LessonID");
        References(x => x.TblStudent).Column("StudentID");
    }
}
}

 private void button_JoinSelect_Click(object sender, EventArgs e)
    {
        var cfg = new Configuration();
        PersistenceModel pm = new PersistenceModel();
        pm.AddMappingsFromAssembly(typeof(human.TblStudent).Assembly);
        pm.Configure(cfg);
        ISessionFactory factory = cfg.BuildSessionFactory();

        using (var session = factory.OpenSession())
        {
            using (var trans = session.BeginTransaction())
            {
                var query = session.QueryOver<TblStudent().JoinQueryOver<TblTerm>
      (c=> c.TblTerms).List();
                trans.Commit();
                dataGridView1.DataSource = query;
            }
        }
      }

Моя ошибка:

NHibernate.Exceptions.GenericADOException: не удалось выполнить запрос [SELECT this_.ID, как ID1_1_, this_.name, как name1_1_, this_.lastname, как lastname1_1_, tblterm1_.ID, как ID2_0_, tblterm1_.LessonID, как LessonID2_0_, tblterm1_.StudentID, как StudentID2_0_ ОТ TblStudent this_ внутреннее соединение TblTerm tblterm1_ на this_.ID = tblterm1_ .TblStudent_id] [SQL: ВЫБЕРИТЕ this_.ID в качестве ID1_1_, this_.name в качестве name1_1_, this_.lastname в качестве фамилии1_1_, tblterm1_.ID в качестве ID2_0_, tblterm1_.LessonID в качестве LessonID2_0_, tblterm1_.StudentID в качестве студента TID_0_1 = tblterm1_.TblStudent_id] ---> System.Data.SqlClient.SqlException: Неверное имя столбца 'TblStudent_id'. в System.Data.SqlClient.SqlConnection.OnError (исключение SqlException, логическое breakConnection) в System.Data.SqlClient.SqlInternalConnection.OnError (исключение SqlException, логическое breakConnection) в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning () в System.Data.SqlClient.TdsParser.Run (RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) в System.Data.SqlClient.SqlDataReader.ConsumeMetaData () в System.Data.SqlClient.SqlDataReader.get_MetaData () в System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) в System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, логический returnStream, логический асинхронный) в System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, логический returnStream, метод String, результат DbAsyncResult) в System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, логический returnStream, метод String) в System.Data.SqlClient.SqlCommand.ExecuteReader (поведение CommandBehavior, метод String) в System.Data.SqlClient.SqlCommand.ExecuteDbDataReader (поведение CommandBehavior) в System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader () в NHibernate.AdoNet.AbstractBatcher.ExecuteReader (IDbCommand cmd) в d: \ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ AdoNet \ AbstractBatcher.cs: строка 247 в NHibernate.Loader. в NHibernate.Loader. в NHibernate.Loader. в NHibernate.Loader.Loader.DoList (сеанс ISessionImplementor, QueryParameters queryParameters) в d: \ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Loader \ Loader.cs: строка 1694 --- Конец внутренней трассировки стека исключений --- в NHibernate.Loader.Loader.DoList (сеанс ISessionImplementor, QueryParameters queryParameters) в d: \ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Loader \ Loader.cs: строка 1703 в NHibernate.Loader.Loader. в NHibernate.Loader.в NHibernate.Criterion.QueryOver`1.NHibernate.IQueryOver.List () в d: \ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Criterion \ QueryOver.cs: строка 198 в human.Form1.button_JoinSelect_Click (Отправитель объекта,EventArgs e) в E: \ desktop \ Human \ human \ human \ Form1.cs: строка 84

Пожалуйста, сообщите мне

1 Ответ

0 голосов
/ 14 октября 2011

Это исключение может быть результатом многих причин.Например, я получаю ту же ошибку, когда просто пытаюсь запустить ваш код поверх моей базы данных без ваших таблиц вообще.Попробуйте проверить, хорошо ли вернулась какая-либо запись из любой таблицы, затем попытайтесь заставить ваше объединение работать.Я не вижу ошибки, когда я настроил nh правильно, не было выдано никаких исключений.Попробуйте этот код вместо заводской инициализации (на новой новой базе данных), он создает таблицы из ваших сопоставлений, чтобы увидеть, совпадают ли ваши реальные таблицы.

ISessionFactory factory = Fluently.Configure()
            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<TblStudent>())
            .ExposeConfiguration(config => new SchemaExport(config).Create(false, true));
...