Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.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
C# 自由基连接_C#_Nhibernate_Join_Fluent Nhibernate_Fluent Nhibernate Mapping - Fatal编程技术网

C# 自由基连接

C# 自由基连接,c#,nhibernate,join,fluent-nhibernate,fluent-nhibernate-mapping,C#,Nhibernate,Join,Fluent Nhibernate,Fluent Nhibernate Mapping,我有一个实体映射到一个名为Rule的表。此实体的表与另一个名为Category的表具有FK。我试图找出如何从规则实体的类别中提取属性。我很确定我想在实体映射中使用连接,但我不知道如何配置它以使其工作。以下是我的映射: Join("Category", x => { x.Map(i => i.CategoryName, "Name"); x.KeyColumn("CategoryId"); x.Inverse(); }); 这是它正在生成的SQL SELEC

我有一个实体映射到一个名为Rule的表。此实体的表与另一个名为Category的表具有FK。我试图找出如何从规则实体的类别中提取属性。我很确定我想在实体映射中使用连接,但我不知道如何配置它以使其工作。以下是我的映射:

Join("Category", x => 
{
    x.Map(i => i.CategoryName, "Name");
    x.KeyColumn("CategoryId");
    x.Inverse();
});
这是它正在生成的SQL

SELECT ...
FROM Rule rules0_ left outer join Category rules0_1_ on rules0_.Id=rules0_1_.CategoryId
WHERE ...
这是我想要的SQL

SELECT ...
FROM Rule rules0_ left outer join Category rules0_1_ on rules0_.CategoryId=rules0_1_.Id
WHERE ...
我似乎找不到任何能让我这么做的东西。从我找到的一些文档来看,Subselect看起来很有前途,但是我找不到任何关于如何使用它的示例。对此问题的任何建议都将不胜感激。谢谢

“Join”的名称很差。NHibernate映射中的“连接”意味着基于两个表的主键关系的零对一关系。例如,如果您有一个User表和一个UserAdditionalInfo表,并且每个用户有零条或一条记录,则可以使用join。UserAdditionalInfo表可能会引用来自用户的PK作为外键和它自己的主键。当DBA必须虔诚地维护遗留应用程序的模式时,这种情况很常见,但较新的应用程序需要相同概念记录的新字段

您实际需要的是引用关系,其中一个记录与零个或一个其他记录具有外键关系。您可以这样流利地设置它:

References(x=>Category)
    .Column("CategoryId")
    .Inverse()
    .Cascade.None();

问题是,现在必须映射类别;它是一个独立的实体,现在与您的实体相关。您可以选择使用此模型,通过将实体引用设置为私有,更改映射以访问实体本身,并将“传递”编码到您想要公开的属性,或者通过使用代码工具(如AutoMapper)在运行时将此深域模型投影到平面DTO以供一般使用,从而“展平”此模型。它们都有优点和缺点。

。。。所以听起来join不是为我的特殊情况设计的。为了澄清我的一些关系,我有一个多对一关系,我想把一个属性从“一”端(类别)拉到我的“多”端(规则)。是的,我考虑过使用引用映射引入整个类别实体(我已经映射了),但实际上我想要的只是一个属性,所以我试着想象一下。可能只是优化了一些并不需要的东西。谢谢你的反馈!