这一次让我把头发扯掉。我正在使用Fluent NHibernate中的自动化功能,但它似乎有选择地忽略了一些重写,但实现了其他一些很好。
不起作用:
public class CupTree
{
public virtual int Id { get; set; }
public virtual int TournamentId { get; set; }
public virtual int CurrentRound { get; set; }
public virtual IList<CupRound> Rounds { get; set; }
}不工作覆盖:
public class CupTreeOverride : IAutoMappingOverride<CupTree>
{
public void Override(FluentNHibernate.Automapping.AutoMapping<CupTree> mapping)
{
mapping.HasMany(x => x.Rounds).Cascade.All();
}
}模式生成:
public void GenerateSchema()
{
var config = new MappingConfiguration();
Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008.ConnectionString(/*my conn str*/))
.Mappings(m => m.AutoMappings.Add(
AutoMap.AssemblyOf<CupTree>(config)
.Conventions.Add(
DefaultLazy.Never(),
Table.Is(x => x.EntityType.Name + "s"))
.UseOverridesFromAssembly(Assembly.GetAssembly(typeof(CupTreeOverride)))
))
.ExposeConfiguration(cfg => new SchemaUpdate(cfg).Execute(false, true))
.BuildSessionFactory();
} 因此,虽然它创建了CupTree表,但它根本没有创建CupRounds表。但是它确实创建了PreMatchTeamInfo表及其所有子表。很明显,我在做一些不可思议的蠢事,但似乎找不到它。这里的任何帮助都非常感谢。
发布于 2014-04-23 11:40:27
我已经设法追踪到列名。我更改了SchemaUpdate,使其打印出sql语句并运行它们。
这会生成SQL错误,这不会导致我的模式更新失败(说一切正常)。我在类中使用了名称"Order“作为属性名,这在SQL中当然是一个保留字。我换了别的名字,一切都很好。
对于下一个人,解决此问题的方法是:
https://stackoverflow.com/questions/23242717
复制相似问题