c# - 使用 NHibernate Queryover 内部连接 ​​3 个表

标签 c# nhibernate

我需要使用 NHibernate Queryover 连接 3 个表 ,但我无法让它工作。有什么建议吗?

我用过这段代码 http://www.d80.co.uk/post/2011/02/20/Linq-to-NHibernate-Tutorial.aspx

NHibernate 代码

namespace SimpleNHibernateClient.ConsoleApplication
{
class Program
{
    static void Main(string[] args)
    {
        ReadALL();
        Console.ReadKey();
    }

    private static Make ReadALL()
    {
        using (var session = NHibernateHelper.OpenSession())
        {
            var makeQuery = session.QueryOver<Make>()
            .Where(_ => _.Name == _.Name)
            .List()

            foreach (var m in makeQuery)
            {
                Console.WriteLine("Name: " + m.Name);
                Console.WriteLine("Description: " + m.Description); //Dont Work
            }
            return null;
        }
    }

}

public class Car
{
    public virtual int Id { get; set; }
    public virtual string Title { get; set; }
    public virtual string Description { get; set; }
    public virtual Make Make { get; set; }
    public virtual Model Model { get; set; }
}

public class Make
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual IList<Model> Models { get; set; }
}

public class Model
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual Make Make { get; set; }
}
 }


 namespace SimpleNHibernateClient.ConsoleApplication
 {
public class CarMap : ClassMap<Car>
{
    public CarMap()
    {
        Id(x => x.Id);
        Map(x => x.Title);
        Map(x => x.Description);
        References(x => x.Make).Column("MakeId");
        References(x => x.Model).Column("ModelId");
        Table("Car");
    }
}

public class MakeMap : ClassMap<Make>
{
    public MakeMap()
    {
        Id(x => x.Id);
        Map(x => x.Name);
        HasMany(x => x.Models)
            .KeyColumn("MakeId");
        Table("Make");
    }
}

public class ModelMap : ClassMap<Model>
{
    public ModelMap()
    {
        Id(x => x.Id);
        Map(x => x.Name);
        References(x => x.Make)
            .Column("MakeId");
        Table("Model");
    }
}




namespace SimpleNHibernateClient.ConsoleApplication
{
    public class NHibernateHelper
    {
        private static ISessionFactory _sessionFactory;

        private static ISessionFactory SessionFactory
        {
            get
            {
                if (_sessionFactory == null)
                    InitializeSessionFactory();

                return _sessionFactory;
            }
        }

        private static void InitializeSessionFactory()
        {
            _sessionFactory = Fluently.Configure()
                .Database(MsSqlConfiguration.MsSql2008
                              .ConnectionString(
                                  @"Server=localhost;Database=SimpleNHibernate;Trusted_Connection=True;")

                )
                .Mappings(m =>
                          m.FluentMappings
                              .AddFromAssemblyOf<Car>())
                .BuildSessionFactory();
        }

        public static ISession OpenSession()
        {
            return SessionFactory.OpenSession();
        }
    }
}

SQL 查询

SELECT * FROM Make INNER JOIN Model ON Make.Id = Model.MakeId 
INNER JOIN Car ON Make.Id = Car.MakeId AND Model.Id = Car.ModelId

最佳答案

你不应该使用列表吗:

 IList<Make> makeQuery = session.QueryOver<Make>()
            .Where(_ => _.Name == _.Name)
            .List()

关于c# - 使用 NHibernate Queryover 内部连接 ​​3 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24204654/

相关文章:

C# SocketException 没有被捕获

c# - 用数字保证精度?

nhibernate - 没有事务就不能更新对象

unit-testing - 如何将 SQLite 配置为与 NHibernate 一起运行,其中程序集解析 System.Data.SQLite?

c# - Linq 2 Sql插入没有关系

c# - .NET Framework 中的 lambda 和委托(delegate)有什么区别?

c# - 如何优雅地复制图形(神经网络)

NHibernate 缩小代理警告

.net - Nhibernate更新问题-参数索引超出范围

.net - NHibernate 和存储库模式