gpt4 book ai didi

nhibernate - FluentNHibernate 映射需要帮助

转载 作者:行者123 更新时间:2023-12-04 06:41:52 27 4
gpt4 key购买 nike

我有以下实体

alt text

我试图在 FluentNHibernate 的帮助下映射它们。

关于实体的一些说明:

  • 属性 CreatedByAssignedToTask实体是 Person 类型,在数据库端是 int 列,分别称为 CreatorIDAssigneeID
  • 属性 WrittenBy在实体上 Note是 Person 类型,它持久存在于名为 AuthorID 的列的数据库中。

  • 我不会在这里包含所有映射,因为它可能不需要,但是当我添加任务和注释映射时,我面临的最大问题就出来了。

    现在实际上,如果我尝试将地址添加到 Person 对象 NHibernate 尝试执行以下查询
    UPDATE Addresses SET AuthorID = @p0 WHERE AddressID = @p1;

    我哪里错了?

    编辑 : 添加了实体的映射
    public PersonMap() {
    Table( "Persons" );
    Id( c => c.PersonID ).Column( "PersonID" ).GeneratedBy.Identity();
    References( c => c.Company ).Column( "CompanyID" );
    HasMany( c => c.Addresses ).Cascade.SaveUpdate();
    HasMany( c => c.TasksAsCreator ).Cascade.SaveUpdate();
    HasMany( c => c.TasksAsAssignee ).Cascade.SaveUpdate();
    HasMany( c => c.NotesAsAuthor ).Cascade.SaveUpdate();
    }

    public TaskMap() {
    Table( "Tasks" );
    Id( i => i.TaskID ).Column( "TaskID" ).GeneratedBy.Identity();
    References( i => i.Company ).Column( "CompanyID" );
    References( i => i.CreatedBy ).Column( "CreatorID" );
    References( i => i.AssignedTo ).Column( "AssigneeID" );
    HasMany( i => i.Notes ).Cascade.SaveUpdate();
    }

    public NoteMap() {
    Table( "Notes" );
    Id( n => n.NoteID ).Column( "NoteID" ).GeneratedBy.Identity();
    References( n => n.Task ).Column( "TaskID" );
    References( n => n.WrittenBy ).Column( "AuthorID" );
    }

    编辑 2 :导出映射后(感谢dotjoe)我发现了许多奇怪的结果,如下所示
    <bag cascade="save-update" name="NotesAsAuthor" mutable="true">
    <key>
    <column name="CreatorID" />
    </key>
    <one-to-many class="Note, GSLConverter, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    </bag>

    这是完全错误的! 并且不反射(reflect)上面显示的映射....

    最佳答案

    你能显示与 Person 实体相关的属性的映射吗?我会确保您在 Note/Task 到 Person 映射的两侧(Reference 和 HasMany)指定相同的 fk 列名称。我以前见过这个......我认为这是 Fluent 中的一个错误,当它使用先前指定的列名作为另一个映射上的类型时。另外,请确保您拥有最新版本的 Fluent。

    要进行故障排除,您可以使用 ExportTo 查看生成的 xml 映射。 FluentMappingsContainer 的方法...

    var factory = Fluently.Configure()
    .Mappings(mc =>
    mc.FluentMappings.AddFromAssemblyOf<PersonMap>().ExportTo("."))
    .BuildSessionFactory();

    关于nhibernate - FluentNHibernate 映射需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4146438/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com