我正在尝试创建一个
public class BaseMap<T> : ClassMap<T>
我的申请。它应该支持本地化实体,它们的主键必须是Id和amp;语言:
CompositeId()
.KeyProperty(x => x.Id)
.KeyProperty(x => ((ILocalizedEntity)x).Language);
我想要的另一件事是一个能够引用另一个本地化类的本地化类。
我做了以下(经过大量研究,这就是我所拥有的):
public new ManyToOnePart<TOther> References<TOther>(Expression<Func<T, TOther>> memberExpression) where TOther : BaseEntity
{
if (typeof(ILocalizedEntity).IsAssignableFrom(typeof(TOther)))
{
return base.References(memberExpression)
.Columns("CategoryId")
.Columns("Language");
}
return base.References(memberExpression);
}
这在尝试插入时给了我IndexOutOfRange异常,原因是“Language”属性被映射了两次,但是DB中只有1个语言列,所以我这样做了:
public new ManyToOnePart<TOther> References<TOther>(Expression<Func<T, TOther>> memberExpression) where TOther : BaseEntity
{
if (typeof(ILocalizedEntity).IsAssignableFrom(typeof(TOther)))
{
return base.References(memberExpression)
.Columns("CategoryId")
.Columns("Language")
.Not.Update()
.Not.Insert();
}
return base.References(memberExpression);
}
哪个解决了IndexOutOfRange问题,但没有完成我想要的。因为它总是向列“CategoryId”插入NULL,因为我指定了Not.Insert()和Not.Update(),所以它没有!
现在,我处于一种情况,我希望它映射“CategoryId”而不是“语言”,因为它已经映射,因为它是ComposideId(主键)的一部分。
所以我尝试了这个:
public new ManyToOnePart<TOther> References<TOther>(Expression<Func<T, TOther>> memberExpression) where TOther : BaseEntity
{
if (typeof(ILocalizedEntity).IsAssignableFrom(typeof(TOther)))
{
return base.References(memberExpression)
.Columns("CategoryId")
.Nullable()
.Columns("Language")
.Not.Update()
.Not.Insert();
}
return base.References(memberExpression);
}
网上钓鱼它不会只插入或更新“语言”而不是“CategoryId” - 但也没有运气。
我也尝试在PK中首先制作语言:
CompositeId()
.KeyProperty(x => ((ILocalizedEntity)x).Language)
.KeyProperty(x => x.Id);
并将参考文献更改为:
return base.References(memberExpression)
.Columns("Language")
.Not.Update()
.Not.Insert()
.Columns("CategoryId")
.Nullable();
但仍然是“Not.Insert()”和“Not.Update()”正在影响“语言”和“ “类别ID”。
我尝试在“引用”调用之前映射“CategoryId”,如下所示:
Map(memberExpression, "Language");
return base.References(memberExpression)
.......
但它失败了。
任何人都有任何想法,当一列与主键和外键共用时,如何从具有2列CompositeId的类引用具有2列CompositeId的类?
答案 0 :(得分:0)
我有一个类似的问题,复合词的一部分是一个参考,我无法解决它与google,SO或我自己尝试2周,因此不喜欢它们。
有些情况CompositeId
有它的位置,但在你描述的情况下很可能没有。获取实际语言值的简单字典和便利属性要简单得多,并且避免重复所有其他对每种语言都相同的属性。