我现在已经在这2天苦苦挣扎,所以我想我会在这里试一试。
我的情景看起来像这样。我有一个客户和客户电话。现在我同时保存了客户和CustomerPhone,但CustomerPhone没有立即获得ID。但如果我重定向到其他网站并获得Customer对象,则CustomerPhone将具有Id。
这些类的代码看起来像这样。
public virtual int Id { get; private set; }
public virtual string Name { get; set; }
public virtual string OrgNumber { get; set; }
public virtual DateTime? CreateDate { get; set; }
public virtual bool Active { get; set; }
public virtual string Email { get; set; }
public virtual IList<CustomerPhone> CustomerPhones { get; set; }
public Customer()
{
CustomerPhones = new List<CustomerPhone>();
}
public virtual void AddCustomerPhones(CustomerPhone customerPhone)
{
customerPhone.Customer = this;
CustomerPhones.Add(customerPhone);
}
我使用流畅的nhibernate进行映射,但我已经看过了它,它似乎不是问题。
如果您对此有任何想法,请写信,因为这对我来说是个大问题。
答案 0 :(得分:2)
这是因为您的会话可能是基于请求的。因此,在您的请求结束时,它会自动刷新。没有刷新,你的东西只是在Nhib会话中,并没有添加到数据库中,因此它没有在数据库中生成的Id。 (我假设你使用主键的身份)
手动冲洗它,你将拥有ID。
答案 1 :(得分:1)
在没有看到你的映射的情况下,我只能给出一般建议......但是我之前遇到过这种情况,当时NHibernate在其会话中有一些待更改。对session.Flush()
的调用通常会通过持久化实体并获取ID值来排除“问题”。
干杯, 约翰