相关疑难解决方法(0)

流畅的NHibernate一对多单向映射

我有Post和Comment课程,他们有一对多关系,其中Post有一个评论列表.我如何将其映射为与Fluent NHibernate的单向关系,因为评论不需要知道其父Post?目前,这是我对Comment的映射:

Id(x => x.Id);
Map(x => x.Body);
References(x => x.User);
Run Code Online (Sandbox Code Playgroud)

和邮政:

Id(x => x.Id);
Map(x => x.Title);
HasMany(x => x.Comments)
    .Inverse()
    .WithKeyColumn("PostId")
    .Cascade.AllDeleteOrphan();
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为当我尝试使用新添加的Comment保存Post实例时,Comment(PostId)上的外键保持为NULL.当然,使用NULL PostId无法保存注释.我已经尝试删除.Inverse()子句,但这也不起作用.

fluent-nhibernate

15
推荐指数
1
解决办法
6726
查看次数

插入后,NHibernate仍然会发布更新

我有一个非常简单的单向映射.见下文:

    public ContactMap()
    {
        Id(x => x.Id).GeneratedBy.Assigned();
        Map(x => x.Name);
        References(x => x.Device);
        HasMany(x => x.Numbers)
            .Not.Inverse()
            .Not.KeyNullable()
            .Cascade.AllDeleteOrphan()
            .Not.LazyLoad()
            .Fetch.Subselect();
        Table("Contacts");
    }


    public PhoneNumberMap()
    {
        Id(x => x.Id).GeneratedBy.Native();
        Map(x => x.Number);
        Table("ContactNumbers");
    }
Run Code Online (Sandbox Code Playgroud)

根据nhibernate 3及更高版本之后的这篇文章,将key设置为non-nullable应该修复insert-update问题(当NHibernate发出插入时外键设置为null然后更新以更新外键以纠正值时的问题) ,但事实并非如此.当我将密钥设置为不可为空时,NHibernate会发出正确的插入语句

INSERT INTO ContactNumbers
            (Number,
             ContactId)
VALUES      ('(212) 121-212' /* @p0 */,
             10 /* @p1 */);
Run Code Online (Sandbox Code Playgroud)

如您所见,它会插入ContactId字段,但在此之后,它仍会发出update语句

UPDATE ContactNumbers
SET    ContactId = 10 /* @p0 */
WHERE  Id = 34 /* @p1 */
Run Code Online (Sandbox Code Playgroud)

所以要澄清问题.NHibernate使用正确分配的外键插入Contact行,然后发出更新语句以更新冗余的外键(ContactId).

如何摆脱这种冗余的更新声明?谢谢.

顺便说一下,我正在使用最新版本的NHibernate和Fluent NHibernate.数据库是SQLite

mapping nhibernate fluent-nhibernate

10
推荐指数
1
解决办法
2943
查看次数

标签 统计

fluent-nhibernate ×2

mapping ×1

nhibernate ×1