我有一个LanguageMap对象,其中包含一个字典,用于将语言代码映射到它的值。该对象用于许多需要多种语言的对象。因此,它在我的数据模型中被引用。
Paint paint = new Paint();
paint.setColor(Color.YELLOW);
paint.setStrokeWidth(10);
paint.setShadowLayer(5, 0, 1, Color.RED);
Canvas canvas = new Canvas(bitmap);
canvas.drawLine(0, 0, canvas.getWidth(), 0, paint);
canvas.drawLine(0, 0, 0, canvas.getHeight(), paint);
canvas.drawLine(0, canvas.getHeight(), canvas.getWidth(), canvas.getHeight(), paint);
canvas.drawLine(canvas.getWidth(), 0, canvas.getWidth(), canvas.getHeight(), paint);
我的映射如下:
public class LanguageMap
{
public virtual Guid Id { get; set; }
public virtual IDictionary<String, String> Map { get; set; }
public LanguageMap()
{
Map = new Dictionary<string, string>();
}
}
在具有LanguageMap属性的所有类(例如public class LanguageMapMapping : ClassMap<LanguageMap>
{
public LanguageMapMapping()
{
Id(x => x.Id);
HasMany(x => x.Map)
.Table("LanguageMapMap")
.AsMap<string>("LanguageKey")
.Element("value")
.Cascade.All().Cascade.AllDeleteOrphan();
}
}
)上,该属性的映射为:
public virtual LanguageMap Details{ get; set; }
语言映射表是不必要的,只是无缘无故地添加额外的连接。
知道如何修复映射吗?
答案 0 :(得分:3)
NHibernate创建了附加表,因为它需要一个Id。
没有表语言,NHibernate就无法提供唯一的映射键。想象一下,您有2个表需要将用户和角色链接到LanguageMapMap表,并且两者都可以具有Id = 1实体。如果这两个实体都需要LanguageMapMap表中的条目,NHibernate将无法将它们放在一起。