gpt4 book ai didi

asp.net - Fluent NHibernate,动态改变映射表?

转载 作者:行者123 更新时间:2023-12-01 01:22:41 25 4
gpt4 key购买 nike

使用fluent nhibernate,有没有办法在运行时动态切换映射表?

例如:

public class XYClassMap : ClassMap<XY>
{
public XYClassMap( )
{
Table("XYTable");
Id(d => d.Id).GeneratedBy.Identity();
Map(d => d.Value);
(...)

鉴于有多个插件,每个插件都使用这个类,但它们需要处理不同的表。我正在寻找这样的东西:

public class XY {
public string Tablename {get; set;}
}

public class XYClassMap : ClassMap<XY>
{
public XYClassMap( )
{
Table(Tablename);
Id(d => d.Id).GeneratedBy.Identity();
Map(d => d.Value);
(...)

因此每个操作方法都可以与同一个类一起工作,只需要设置这个属性“Tablename”。

感谢您的帮助,

史蒂芬

最佳答案

映射是在应用程序启动时编译的,一旦发生就无法更改。

如果您的插件使用不同的表,那么根据定义它们不是相同的实体(因此也不是相同的映射)。如果您的插件都定义了具有相同结构的不同表,那么您需要单独的映射,但您可能能够抽象出实际定义。

也许是这样的:每个插件都为这个表定义它自己的映射,它派生自一个包含实际映射的抽象类,除了表名。

public abstract class PluginMap<T> : ClassMap<T> where T : IPlugin
{
public PluginMap()
{
Id(d => d.Id).GeneratedBy.Identity();
Map(d => d.Value);
}
}

public class PluginOneMap : PluginMap<PluginOne>
{
public PluginOneMap()
{
Table("PluginOne");
}
}

public class PluginTwoMap : PluginMap<PluginTwo>
{
public PluginTwoMap()
{
Table("PluginTwo");
}
}

或者,您可以将它们定义为 table-per-subclass 或 table-per-inheritance-hierarchy 中的子类。

关于asp.net - Fluent NHibernate,动态改变映射表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2290530/

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