gpt4 book ai didi

c# - 在 NHibernate 中包含空值的复合 Id

转载 作者:太空狗 更新时间:2023-10-30 01:24:20 25 4
gpt4 key购买 nike

我有一个情况,我有一个包含 3 列的表,其中包含引用不同表的 ID。除了这 3 列之外,我还有几列具有一些属性。

假设 3 列是 Foo、Bar、Baz。 Foo 永远不会为 null,并且 Bar 和 Baz 中的一个恰好为 null。

我的实体和映射看起来像这样(请记住我想让事情保持简单):

public class FooBarBaz
{
public virtual Foo Foo { get; set; }
public virtual Bar Bar { get; set; }
public virtual Baz Baz { get; set; }
public virtual string Prop { get; set; }

public override bool Equals(Object obj)
{
/* checks for nulls etc. in the end
returns Foo == obj.Foo && Bar == obj.Bar && Baz == obj.Baz */
}

public override int GetHashCode()
{
/* builds unique string for (Foo,Bar,Baz)
taking nulls into account and gets it's hashcode */
}
}

public class FooBarBazMap : ClassMap<FooBarBaz>
{
public FooBarBazMap()
{
CompositeId()
.KeyReference(x => x.Foo, "Foo_Id")
.KeyReference(x => x.Bar, "Bar_Id")
.KeyReference(x => x.Baz, "Baz_Id");
Map(x => x.Prop);
}
}

我手动创建了一行,其中所有三列都不为空,并且此映射工作得很好。但我的应用程序逻辑基于这样一个事实,即两者(Bar、Baz)之一始终为 null,在这种情况下,NHibernate 将 null 作为 FooBarBaz 实体返回。

我该如何克服这个问题? NHibernate 是否允许 CompositeId 中的空值?

最佳答案

nhibernate 是关系数据库之上的抽象,关系数据库不允许在主键列中使用空值(实际上所有 pk 列都没有空值约束)。

假设此表是 3 个实体之间的链接表,我会将其映射为一个组件。如果您发布 Foo bar 和 baz 之间的关联,我可以举个例子。

关于c# - 在 NHibernate 中包含空值的复合 Id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9722271/

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