刚刚启动了一个项目,将NHibernate Fluent映射转换为NHibernate Mapping By Code,作为与我的一个旧应用程序相关的升级的一部分。
几乎就在那里,但我偶然发现了一些我无法正确转换的事情,发现自己很难过。现在我希望也许你们中的一些经验丰富的人可以帮助我。 下面是使用Fluent的原始映射:
HasMany<ExampleEntity>(x => x.OtherExampleEntities)
.OptimisticLock.False()
.AsSet()
.KeyColumn("ParentExampleEntityId")
.Inverse()
.Cascade.SaveUpdate();
现在我无法转换我的映射的KeyColumn部分,下面是我当前的进度(因此keyColumn仍在那里):
Set(x => x.OtherExampleEntities, x => {
x.OptimisticLock(false);
x.KeyColumn("ParentExampleEntityId");
x.Inverse(true);
x.Cascade(Cascade.Persist);
}, map => map.OneToMany(r => r.Class(typeof(ExampleEntity))));
NHibernate的代码部分没有很多关于映射的文档,但是我花了很多时间来处理notherdev(@ blogspot.se)发布的帖子。所有帮助表示赞赏。
答案 0 :(得分:0)
有关<set>
映射
小片段,但请注意帖子:
Set(x => x.Users, c =>
{
c.Fetch(CollectionFetchMode.Join); // or CollectionFetchMode.Select,
// CollectionFetchMode.Subselect
c.BatchSize(100);
c.Lazy(CollectionLazy.Lazy); // or CollectionLazy.NoLazy, CollectionLazy.Extra
c.Table("tableName");
c.Schema("schemaName");
c.Catalog("catalogName");
c.Cascade(Cascade.All);
c.Inverse(true);
c.Where("SQL command");
c.Filter("filterName", f => f.Condition("condition"));
c.OrderBy(x => x.Name); // or SQL expression
c.Access(Accessor.Field);
c.Sort<CustomComparer>();
c.Type<CustomType>();
c.Persister<CustomPersister>();
c.OptimisticLock(true);
c.Mutable(true);
<key column="" ...>
映射:
c.Key(k =>
{
k.Column("columnName");
// or...
k.Column(x =>
{
x.Name("columnName");
// etc.
});
k.ForeignKey("collection_fk");
k.NotNullable(true);
k.OnDelete(OnDeleteAction.NoAction); // or OnDeleteAction.Cascade
k.PropertyRef(x => x.Name);
k.Unique(true);
k.Update(true);
});
....