流利的Nhibernate映射字典创建额外的表

时间:2016-01-04 08:01:41

标签: c# dictionary nhibernate fluent-nhibernate

我有一个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; }

由于某种原因,这总是在数据库中创建一个额外的表: enter image description here

语言映射表是不必要的,只是无缘无故地添加额外的连接。

知道如何修复映射吗?

1 个答案:

答案 0 :(得分:3)

NHibernate创建了附加表,因为它需要一个Id。

没有表语言,NHibernate就无法提供唯一的映射键。想象一下,您有2个表需要将用户和角色链接到LanguageMapMap表,并且两者都可以具有Id = 1实体。如果这两个实体都需要LanguageMapMap表中的条目,NHibernate将无法将它们放在一起。