簡體   English   中英

FluentNhibernate映射字典外鍵保持空

[英]FluentNhibernate Mapping Dictionaries Foreign Key Remains Null

我有一個簡單的Fluent-NHibernate映射讓我頭疼! 我正在嘗試為其中一個實體映射字典,但其FK仍然為空。

這是實體代碼:

public class Person
{
    public Person()
    {
        PhoneNumbers = new Dictionary<string, Phone>();
    }

    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual IDictionary<string, Phone> PhoneNumbers { get; set; }
}

public class Phone
{
    public virtual int Id { get; set; }
    public virtual string Type { get; set; }
    public virtual string Number { get; set; }
}

現在,這是映射:

public class PersonClassMap : ClassMap<Person>
{
    public PersonClassMap()
    {
        Id(x => x.Id).GeneratedBy.Identity();
        Map(x => x.Name);
        HasMany(x => x.PhoneNumbers).AsMap(y => y.Type).Cascade.All();
    }
}

public class PhoneClassMap : ClassMap<Phone>
{
    public PhoneClassMap()
    {
        Id(x => x.Id).GeneratedBy.Identity();
        Map(x => x.Type);
        Map(x => x.Number);
    }
}

最后,這是我正在做的測試:

    static void Main(string[] args)
    {
        ConfigureSessionFactory();

        using (var session = _sessionFactory.OpenSession())
        {
            var john = new Person();
            john.Name = "John";

            Phone home = new Phone
                             {
                                 Type = "Home",
                                 Number = "12345"
                             };

            john.PhoneNumbers.Add(home.Type, home);

            session.Save(john);
        }
    }

出於某種原因,當我查看數據庫時,電話記錄的Person_id保持為空,當我從數據庫加載該人時, PhoneNumbers字典保持為空。

為什么? 以及如何解決這個問題? 我映射錯了什么?

最終通過添加事務解決了此問題。 我不知道為什么會這樣(這實際上讓我很傷心),但確實如此。

using (var session = _sessionFactory.OpenSession())
{
    var transaction = session.BeginTransaction();
    john.Name = "John";

    Phone home = new Phone
                     {
                         Type = "Home",
                         Number = "12345"
                     };
     john.PhoneNumbers.Add(home.Type, home);
     session.Save(john);
     transaction.Commit();
}

希望對你有所幫助,因為我花了3個小時太長時間才能做到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM