流畅的 nhibernate 自动映射域难点
试图让我了解自动映射。我在尝试自动映射我的域并生成数据库时遇到问题。我确信这很简单,我做错了。
问题是,生成了正确的表,但生成的表中仅存在基类中的 ID 字段,实体中没有生成任何其他字段。
BaseEntity 与实体位于不同的命名空间中。
我不知道从这里去哪里,有什么想法吗?
这是我的映射配置:
public static ISessionFactory CreateSessionFactory()
{
return _sessionFactory = Fluently.Configure()
.Database(ConfigureDatabase())
.Mappings(m => m.AutoMappings.Add(CreateMappings()))
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory();
}
private static IPersistenceConfigurer ConfigureDatabase()
{
return MsSqlConfiguration
.MsSql2008.ShowSql()
.ConnectionString(c => c.FromAppSetting("MSSqlConnectionString"))
.ProxyFactoryFactory<ProxyFactoryFactory>();
}
private static AutoPersistenceModel CreateMappings()
{
return AutoMap.AssemblyOf<Organisation>(new AutomappingConfig())
.Conventions.Add<CascadeConvention>();
}
private static void BuildSchema(Configuration config)
{
new SchemaUpdate(config)
.Execute(false,true);
}
这是我的 autoMappingConfig
public class AutomappingConfig : DefaultAutomappingConfiguration
{
public override bool ShouldMap(Type type)
{
return type.Namespace == "Domain.Model" && type.IsClass;
}
}
我的所有实体都继承这个基类:
public class BaseEntity<T> where T : BaseEntity<T>
{
public virtual int Id { get; set; }
}
还有一个示例实体:
public class Contact : BaseEntity<Contact>, IAggregateRoot
{
public virtual String Name { get; set; }
public virtual Organisation Organisation { get; set; }
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可能想要做的就是尝试将它们放在同一个命名空间中。另外,您可能想注释掉上面的检查:
上面的语句可能是导致您只映射基类的原因。您的基类位于哪个命名空间以及您的示例实体之一位于哪个命名空间?
当我遇到这样的问题时,我会尝试简化事情,直到找出导致问题的原因。
编辑:
经过进一步研究,我认为您需要使用以下内容:
因此您上面的代码将更改为:
这是摘自 FNH 维基:
What you may want to do is try putting them in the same namespace. Also you may want to comment out the check you have above:
The above statement may be what is causing you to only map your base classes. What namespace is your base class in and what namespace are one of your example entities in?
When I run into problems like this I try to simplify things until I find out what is causing my issues.
Edit:
After further research I think you need to use the following:
So your code above would be changed to:
This is an excerpt taken from the FNH Wiki:
来自自动映射:基类型作为继承策略:
文章:自动映射通用基类
From Automapping: base-type as an inheritance strategy:
Article: Auto-mapping generic base classes