簡體   English   中英

復合Id在NHibernate中包含空值

[英]Composite Id containing a null value in NHibernate

我有一種情況,我有一個包含3列的表,其中包含引用不同表的ID。 除了這3列之外,我還有一些具有一些屬性的列。

讓我們說3列是Foo,Bar,Baz。 Foo永遠不會為null,而Bar,Baz中只有一個為空。

我的實體和映射看起來像這樣(請記住我想保持簡單):

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);
    }
}

我手動創建了一行,其中所有三列都不為null,並且此映射完全正常。 但是我的應用程序邏輯基於以下事實:兩個中的一個(Bar,Baz)都是null,在這種情況下,NHibernate返回null作為FooBarBaz實體。

我怎樣才能克服這個問題? NHibernate是否允許CompositeId中的空值?

nhibernate是關系數據庫之上的抽象,關系數據庫不允許主鍵列中的空值(實際上所有pk列都沒有空約束)。

假設這個表是3個實體之間的鏈接表,我將它映射為一個組件。 如果你發布Foo bar和baz之間的關聯,我可以給出一個例子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM