gpt4 book ai didi

.net - Fluent NHibernate JoinedSubClass 已过时

转载 作者:行者123 更新时间:2023-12-02 09:45:57 25 4
gpt4 key购买 nike

我想知道一些事情。我坐在这里有一个解决方案,我有 1 个父类(super class),它有 2 个子类,我目前正在使用 JoinedSubClass 映射它,但我知道这个方法已经过时了,并说我应该使用 ClassMap 和 SubClassMap,但如果我这样做自动映射不起作用,我不希望这样。有什么解决办法吗?

这是层次结构:

public class Tag : Entity
{

public virtual string Name {get;set;}
public virtual User User {get;set;}

}

public class RespondentTag : Tag
{
public virtual IList<Respondent> Respondents {get;set;}
}


public class ArchiveTag : Tag
{
public virtual IList<Survey> Surveys {get;set;}
}

正如您可能想到的那样,我希望这是每个层次结构映射的一个表,其子类具有多对多的列表。就像表“Tag”一样,然后是 Tag_Respondent 和 Tag_Archive(对于多对多关系)。

这是我当前使用的映射:

public class TagMap : IAutoMappingOverride<Tag>
{
public void Override(AutoMapping<Tag> mapping)
{
//This is obsolete
mapping.JoinedSubClass("RespondentTagId", RespondentTagMap.AsJoinedSubClass());
mapping.JoinedSubClass("ArchiveTagId", ArchiveTagMap.AsJoinedSubClass());

}
}

public class RespondentTagMap
{
public static Action<JoinedSubClassPart<RespondentTag>> AsJoinedSubClass()
{
return part =>

part.HasManyToMany(x => x.RespondentList)
.Cascade
.SaveUpdate()
.Inverse()
.Table("Tag_Respondent");

}
}


public class ArchiveTagMap
{
public static Action<JoinedSubClassPart<ArchiveTag>> AsJoinedSubClass()
{
return part =>

part.HasManyToMany(x => x.Surveys)
.Cascade
.SaveUpdate()
.Inverse()
.Table("Tag_Archive");

}
}

有谁知道解决此问题的解决方法或其他解决方案? (不禁用自动映射)

任何答案都将不胜感激。

提前致谢!

最佳答案

如果我误解了你的目标,请原谅我,但我会尝试一下,因为我的项目中有类似的继承(尽管我使用带有鉴别器列的每个基类表模式)。

我相信您可以通过让 FNH 忽略您的 Tag 基类,然后覆盖 RespondentTagArchiveTag 上的映射来完成您想要做的事情 对象来实现多对多关系。因此,在 FNH 配置中,您需要为映射调用指定一个参数:

m.AutoMappings.Add(AutoMap.AssemblyOf<SomeObjectInMyAssembly>(new MyAutoMapConfig()) // Assuming you're using a config class
.IgnoreBase(typeof(Entity))
.IgnoreBase(typeof(Tag))
.UseOverridesFromAssemblyOf<SomeOverrideClass>());

然后,您必须在存储它们的任何程序集中设置覆盖。你会得到这样的东西:

public class RespondentTagOverride : IAutoMappingOverride<RespondentTag>
{
public void Override(AutoMapping<RespondentTag> mapping)
{
mapping.HasManyToMany(x => x.RespondentList)
.Cascade
.SaveUpdate()
.Inverse()
.Table("Tag_Respondent"); // Not sure if the table call works in the override...you may have to use a convention for this
}
}

对于 ArchiveTag 对象也是如此。

这与我在继承方案中所做的类似,尽管正如我所提到的,在我的自动映射配置类中,我重写了 IsDiscriminated 方法来指示我的对象是每个基类一个表并且受到歧视。

关于.net - Fluent NHibernate JoinedSubClass 已过时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3316291/

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