NHibernate地图由代码keycolumn?

时间:2014-10-14 12:52:59

标签: c# nhibernate nhibernate-mapping

刚刚启动了一个项目,将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)发布的帖子。所有帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

有关<set>映射

的综合帖子 Adam Bar的

Mapping-by-Code - Set and Bag

小片段,但请注意帖子:

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);
    });
    ....