我正在尝试使用Fluent NHIbernate来跟踪这篇文章:http://blogs.planetcloud.co.uk/mygreatdiscovery/post/Localizing-entities-with-NHibernate.aspx
我的测试会产生以下错误:
----> NHibernate.MappingException : An association from the table TranslatedText refers to an unmapped class: .Domain.Localisation.ILocalizedEntity
任何想法如何让NH尊重界面?
将.IncludeBase<ILocalizedEntity>()
添加到我的自动模型中没有做任何事情......(正如预期的那样,它的界面不是抽象的权利吗?)
映射:(问题)
mapping.HasMany(m => m.TranslatedTexts)
.AsSet()
.Inverse().Cascade.SaveUpdate()
.KeyColumn("EntityId")
.ForeignKeyConstraintName("none")
.Where("EntityClass = 'Domain.Question'");
TranslatedText(has)public virtual ILocalizedEntity Entity { get; set; }
mapping.ReferencesAny(tt => tt.Entity)
.IdentityType<Guid>()
.EntityIdentifierColumn("EntityId")
.EntityTypeColumn("EntityType");
接口:
public interface ILocalizedEntity
{
ICollection<TranslatedText> TranslatedTexts { get; set; }
}
我在FNH测试套件中看到过相同的内容。我觉得这与我使用AutoMapping的事实有关,但不确定到底是什么......
修改 确认 - 使用标准ClassMaps而不是自动化,使用上面相同的映射,按预期工作。
答案 0 :(得分:0)
我确实找到了一个“解决方法”,即删除自动化所涉及的类,并使用ClassMaps手动滚动它们,因为我自动进行HEART自动化,这真的不理想!
sessionFactory = Fluently.Configure()
.Database(sqlConfig)
.Mappings(m => m.AutoMappings.Add(new MyAutoPersistenceModel().GetModel()))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<QuestionMap>())
.BuildSessionFactory();
在MyAutoPersistenceModel中:
public override bool ShouldMap(System.Type type)
{
var interfaces = type.GetInterfaces();
return type != typeof(TranslatedText) &&
!interfaces.Any(x => x.GetType() == typeof(ILocalisedEntity)) &&
interfaces.Any(x => x.IsGenericType && x.GetGenericTypeDefinition() == typeof(IEntityWithTypedId<>));
}