gpt4 book ai didi

c# - FluentNhibernate 映射字典外键保持为空

转载 作者:行者123 更新时间:2023-11-30 13:03:04 24 4
gpt4 key购买 nike

我有一个简单的 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 个小时才做对。

关于c# - FluentNhibernate 映射字典外键保持为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13740420/

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