gpt4 book ai didi

linq - 休眠。加入不相关的实体

转载 作者:行者123 更新时间:2023-12-04 06:02:17 27 4
gpt4 key购买 nike

有没有办法使用 native NHibernate linq 提供程序执行以下查询?

var result =
(from e1 in Session.Query<Entity1>()
join e2 in Session.Query<Entity2>() on e1.SomeField equals e2.SomeField into je
from je2 in je.DefaultIfEmpty()
select new {e1.Id, e1.SomeField, je2.SomeUrelatedField}).ToList()

目前我正在使用 Fluent NHibernate 1.2 和 NHibernate 3.1,我得到 NotImplementedException
我不想介绍 e1 之间的任何关系和 e2 .根据设计,它们没有关系,并且像上面这样的查询可以用于罕见的目的。

This blog post告诉它不受支持。现在呢?

最佳答案

我不太确定这是什么时候引入的,但现在 NHibernate 支持了。我使用的是 3.3.1 版,我有一个与您的查询非常相似的查询,运行良好。下面的测试对我有用:

[TestFixture]
public class NHibernateJoinUnrelatedEntitiesTest
{
private ISessionFactory sessionFactory;

[Test]
public void I_Can_Join_Unrelated_Entities()
{
// Arrange
ISession session = sessionFactory.OpenSession();

// Act
var results = (
from c in session.Query<Customer>()
from wal in session.Query<WebsiteActivityLog>()
where c.Id == wal.CustomerId
&& c.Id == 54856
select new { CustomerId = c.Id, Name = c.FirstName, Address = wal.IpAddress }
).ToList();

// Assert
Assert.NotNull( results );
}

public class Customer
{
public virtual int Id { get; set; }
public virtual string FirstName { get; set; }
}

public class WebsiteActivityLog
{
public virtual int Id { get; set; }
public virtual int CustomerId { get; set; }
public virtual string IpAddress { get; set; }
}

public class CustomerMap : ClassMap<Customer>
{
public CustomerMap()
{
Id( x => x.Id );
Map( x => x.FirstName );
}
}

public class WebsiteActivityLogMap : ClassMap<WebsiteActivityLog>
{
public WebsiteActivityLogMap()
{
Id( x => x.Id );
Map( x => x.CustomerId );
Map( x => x.IpAddress );
}
}
}

关于linq - 休眠。加入不相关的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8805623/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com