在Fluent NHibernate中从外部表映射属性两次

在Fluent NHibernate中从外部表映射属性两次,nhibernate,fluent-nhibernate,fluent,Nhibernate,Fluent Nhibernate,Fluent,我有两个这样的表:(请注意非标准的db模式命名) 我想使用Fluent NHibernate创建两个表到域对象Pen的映射 class Pen { PenID; PrimaryColorName; SecondaryColorName; ... } 我该怎么做呢?课堂用笔 { int PenID; 颜色PrimaryColor; 颜色第二颜色; } 类别颜色 { int ColorID; 字符串颜色名称 } 类颜色映射 { Id(x=>x.ColorID); 映

我有两个这样的表:(请注意非标准的db模式命名)

我想使用Fluent NHibernate创建两个表到域对象
Pen
的映射

class Pen
{
    PenID;
    PrimaryColorName;
    SecondaryColorName;
    ...
}
我该怎么做呢?

课堂用笔 {
int PenID;
颜色PrimaryColor;
颜色第二颜色;
}

类别颜色
{
int ColorID;
字符串颜色名称

}

类颜色映射
{
Id(x=>x.ColorID);
映射(x=>x.ColorName);
}

类PenMap
{
Id(x=>x.PenID);
引用(x=>x.PrimaryColor).列(“TP_PrimaryColorID”);
引用(x=>x.SecondaryColor).列(“TP_SecondaryColorID”);
}类笔 {
int PenID;
颜色PrimaryColor;
颜色第二颜色;
}

类别颜色
{
int ColorID;
字符串颜色名称

}

类颜色映射
{
Id(x=>x.ColorID);
映射(x=>x.ColorName);
}

类PenMap
{
Id(x=>x.PenID);
引用(x=>x.PrimaryColor).列(“TP_PrimaryColorID”);
引用(x=>x.SecondaryColor).列(“TP_SecondaryColorID”);

}

如果只引用名称,我认为您将无法再插入/更新


您可以创建PenColour视图,或者在pen类中隐藏实际引用,并且只公开Name属性。

如果只引用名称,我认为您将无法再插入/更新


您可以创建PenColour的视图或隐藏pen类中的实际引用,并且只显示Name属性。

我不想在pen对象中引用Color对象,只引用颜色的名称,可以这样做吗?是的,您可以创建一个包含两个varchar列PrimaryColorName和SecondaryColorName的视图。限制是您将无法更新或插入。谢谢!我想user456813给出了相同的答案。@tonyjy:如果颜色对于给定的笔是唯一的,并且您想从颜色对象映射回笔属性,该怎么办?我找不到这个pbm的任何解决方案…我不想在笔对象中引用颜色对象,只是颜色的名称,可以这样做吗?是的,您可以创建一个包含两个varchar列PrimaryColorName和SecondaryColorName的视图。限制是您将无法更新或插入。谢谢!我想user456813给出了相同的答案。@tonyjy:如果颜色对于给定的笔是唯一的,并且您想从颜色对象映射回笔属性,该怎么办?我找不到这个pbm的任何解决方案…好的,我明白了。基本上,需要另一个类(例如PenColor)作为只读的视图,为了使更新和插入成为可能,Pen对象仍然需要引用颜色对象(这不是很糟糕,但这是一种抽象泄漏),对吗?一个问题:当你说PenColor的“视图”时,你是指数据库视图吗,还是上课?好的,我明白了。基本上,需要另一个类(例如PenColor)作为只读的视图,为了使更新和插入成为可能,Pen对象仍然需要引用颜色对象(这不是很糟糕,但这是一种抽象泄漏),对吗?一个问题:当你说PenColor的“视图”时,你是指数据库视图吗,还是上课?
class Pen
{
    PenID;
    PrimaryColorName;
    SecondaryColorName;
    ...
}