0

FluentNHibernate を使用して、非常に単純なマッピング (以下) でクラスを更新しようとしています。言語を選択する必要はありません。Insert を実行し、Language プロパティを設定すると、すべてが期待どおりに機能します。次に、参照プロパティのみを設定して更新を試みても、更新ステートメントは発行されません。非参照プロパティの 1 つと言語を更新すると、更新ステートメントが発行されます。

NH v.3.3.1.4000 と FluentNH v.1.3.0.733 を使用しています。

public class OrderItem
{
    public OrderItem()
    {
        OrderDate = DateTime.Now;
        OrderStatus = Models.OrderStatus.Pending;
    }

    public virtual int OrderId { get; set; }
    public virtual Language Language { get; set; }
    public virtual DateTime OrderDate { get; set; }
    public virtual OrderStatus OrderStatus { get; set; }
}


public class OrderItemMap : ClassMap<OrderItem>
{
    public OrderItemMap()
    {
        Table("tblOrder");

        Id(x => x.OrderId);

        Map(x => x.OrderDate);
        Map(x => x.OrderStatus).CustomType(typeof(Int32));


        References(x => x.Language, "LanguageID").Cascade.None();

    }
}

public class LanguageMap : ClassMap<Language>
{
    public LanguageMap()
    {
        Id(x => x.Id);
        Map(x => x.Name);
        Map(x => x.LanguageCode);
    }
}

public class Language
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual string LanguageCode { get; set; }
}

// オブジェクトを更新するコード。数量を設定するコードのコメントを解除すると更新が強制されますが、言語のみを設定すると更新されません。

        NHibernateRepository<Language> languagedb = new NHibernateRepository<Language>(SessionFactory);
        NHibernateRepository<UserDetail> userdb = new NHibernateRepository<UserDetail>(SessionFactory);

        var newItem = itemdb.All().Where(x => x.OrderId == 16).First();

        newItem.Language = languagedb.All().Where(x => x.Id == 1).First();
        //newItem.Quantity = 200;

        itemdb.Update(newItem);
4

2 に答える 2

1

の代わりに、リファレンスで使用Cascade.SaveUpdate()してみてください。LanguageCascade.None()

カスケード オプションの詳細については、Ayende の投稿、または公式の NHibernateドキュメントを参照してください。

于 2012-07-22T22:08:03.993 に答える
0

両方のリポジトリで同じセッションを使用しましたか? セッションにトランザクションを使用したことがありますか? もしそうなら、やろうとするsession.Commit()か、少なくともsession.Flush(). 詳細はこちらSO

于 2012-07-23T02:38:59.153 に答える