【问题标题】:FluentNhibernate Mapping Dictionaries Foreign Key Remains NullFluentNhibernate 映射字典外键保持为空
【发布时间】:2012-12-06 09:21:07
【问题描述】:

我有一个简单的 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 字典仍然为空。

为什么?以及如何解决这个问题?我在映射什么错误?

【问题讨论】:

    标签: c# nhibernate fluent-nhibernate


    【解决方案1】:

    这个问题终于通过添加事务解决了。我不知道为什么会这样(实际上这让我很伤心),但确实如此。

    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 个小时太长的时间才弄好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 2021-11-22
      • 2011-08-25
      • 1970-01-01
      • 2020-09-14
      • 1970-01-01
      相关资源
      最近更新 更多