gpt4 book ai didi

c# - Fluent NHibernate - 如何一对一映射子类?

转载 作者:太空狗 更新时间:2023-10-29 20:06:44 24 4
gpt4 key购买 nike

假设我有三个类(class)。实例化 A 是有效的,但也有特殊情况 B 和 D 是 A 的子类,添加额外信息。

我将如何在(流畅的)NHibernate 中为此创建映射文件?

public class A
{
public int ID { get; set;}
public string CommonProperty1 { get; set; }
public string CommonProperty2 { get; set; }
}

public class B : A
{
public string BSpecificProperty1 { get; set; } //not null
public string BSpecificProperty2 { get; set; } //not null
}

public class D : A
{
public string DSpecificProperty { get; set; } //not null
}

我尝试了以下方法,但根本不起作用:

public class AMap : ClassMap<A>
{
public AMap()
{
Id(x => x.ID);

Map(x => x.CommonProperty1);
Map(x => x.CommonProperty2);
}
}

public class BMap : ClassMap<B>
{
public BMap()
{
References(x => x.ID);
Map(x => x.BSpecificProperty1)
.CanNotBeNull();
Map(x => x.BSpecificProperty2)
.CanNotBeNull();
}
}

public class DMap : ClassMap<D>
{
public DMap()
{
References(x => x.ID);

Map(x => x.DSpecificProperty)
.CanNotBeNull();
}
}

最佳答案

我不确定我是否理解“一对一映射子类”的意思,但是如果您想在子类具有不可为空的属性的地方映射继承,您可以在 Fluent 中这样做- NHibernate:

// Domain classes
public class Animal
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}

public class Cat : Animal
{
public virtual int WhiskerLength { get; set; }
public virtual int ClawCount { get; set; }
}

public class Dog : Animal
{
public virtual int TailWagRate { get; set; }
}



// Mapping file
public class AnimalMap : ClassMap<Animal>
{
public AnimalMap()
{
Id(x => x.Id)
.WithUnsavedValue(0)
.GeneratedBy.Native();

Map(x => x.Name);

var catMap = JoinedSubClass<Cat>("CatId", sm => sm.Map(x => x.Id));

catMap.Map(x => x.WhiskerLength)
.CanNotBeNull();
catMap.Map(x => x.ClawCount)
.CanNotBeNull();

JoinedSubClass<Dog>("DogId", sm => sm.Map(x => x.Id))
.Map(x => x.TailWagRate)
.CanNotBeNull();
}
}

由于您希望子类的属性不为空,因此您必须使用每个类一个表(联合子类)的继承建模方式。这是因为每个层次结构一个表要求所有子类属性都可以为空。

希望对你有帮助。

/埃里克

关于c# - Fluent NHibernate - 如何一对一映射子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/296834/

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