我有个问题:我有用户:
[Class(Table = "Users", Name = "User")]
public class User
{
[Id(0, Column = "UserId", Type = "Guid", Name = "Id")]
[Generator(1, Class = "assigned")]
public Guid Id { get; set; }
[Property(Name = "Password", Column = "Password", Type = "String")]
public string Password { get; set; }
[Property(Name = "Email", Column = "Email", Type = "String")]
public string Email { get; set; }
}和一种分配器:
[JoinedSubclass(ExtendsType = typeof(User), Table = "Distributors")]
public class Distributor : User
{
[Id(0, Column = "DistributorId", Type = "Guid", Name = "Identifier")]
[Generator(1, Class = "assigned")]
protected Guid Identifier { get; set; }
[Property(Name = "Company", Column = "Company", Type = "String")]
public String Company { get; set; }
}现在我需要提升用户到经销商。但是我需要保存他的id (系统的其他部分正在使用它)。我正在争取用户并创建新的分销商。但是当我试图拯救发行商时,我得到了这个错误:
具有相同标识符值的不同对象已经与会话相关联: ec6f6a9f-a236-4385-835c-7f408a5f594d,实体: MLMCore.Entities.Distributor
我已经尝试了所有的方法(保存,SaveOrUpdade,SaveOrUpdateCopy,更新)。但不起作用。有什么办法解决吗?
发布于 2009-02-27 11:19:30
错误是这样说的-您的会话包含一个带有该Id的User实例,因此当您尝试使用该Id保存另一个User ( Distributor)时,NHibernate会发出抱怨。您可以尝试在保存session.Clear()之前清除会话( Distributor ),但我不知道NHibernate是否会突然成功地保存到User和Distributor表。
如果您能够更改您的设计,我建议您这样做--通常,当您的专业类型可能更改时,您不应该使用继承。在您的域中引入某种Role是更好、更方便的。
也许我可以给您一些灵感,尽管我不知道您的领域的具体情况:让用户成为User的实例怎么样?然后,User可以封装一个IList<Role>,您可以将Role专门化为例如Distributor (以及其他相关角色)?
或者让您的公司包含一个IList<Distributor>,每个User指向一个
https://stackoverflow.com/questions/594187
复制相似问题