拯救孩子时的nHibernate继承问题

拯救孩子时的nHibernate继承问题,nhibernate,Nhibernate,我有个问题: 我有一个用户: [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 = "

我有个问题: 我有一个用户:

[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(系统的其他部分正在使用它)。 我正在获得用户并创建新的分销商。但是,当我试图保存分发服务器时,会出现以下错误:

具有相同标识符值的不同对象已与实体MLMCore.Entities.Distributor的会话ec6f6a9f-a236-4385-835c-7f408a5f594d关联


我尝试了所有的方法(save、SaveOrUpdade、SaveOrUpdateCopy、Update)。但它不起作用。有没有办法解决这个问题

错误是它所说的-您的会话包含一个具有该Id的
用户
实例,因此当您尝试使用该Id保存另一个
用户
(一个
分发服务器
)时,NHibernate会抱怨。在保存
分发服务器
之前,您可以尝试清除会话(
session.Clear()
),但我不知道NHibernate是否能成功保存到
用户
分发服务器

如果您能够更改您的设计,我建议您这样做-一般来说,当您的专业化类型可能发生变化时,您不应该使用继承。在您的领域中引入某种
角色
会更好、更方便

也许我可以给你一些启发,尽管我不知道你所在领域的具体情况:让用户就是这样怎么样?
User
的实例。然后,
用户
可能会包含一个
IList
,您可以将
角色
专门化为例如
分销商
(以及其他相关角色)


或者让您的公司包含一个
IList
,每个IList都指向一个
用户

错误是它所说的-您的会话包含一个具有该Id的
用户
,因此当您试图用该Id保存另一个
用户
(一个
分销商
)时,NHibernate会抱怨。在保存
分发服务器
之前,您可以尝试清除会话(
session.Clear()
),但我不知道NHibernate是否能成功保存到
用户
分发服务器

如果您能够更改您的设计,我建议您这样做-一般来说,当您的专业化类型可能发生变化时,您不应该使用继承。在您的领域中引入某种
角色
会更好、更方便

也许我可以给你一些启发,尽管我不知道你所在领域的具体情况:让用户就是这样怎么样?
User
的实例。然后,
用户
可能会包含一个
IList
,您可以将
角色
专门化为例如
分销商
(以及其他相关角色)


或者让您的公司包含一个
IList
,每个IList都指向一个
用户

角色存在于设计中。但我需要分销商的其他字段。继承用于使用户实体更宽。但是为什么不把你的角色抽象化,并用特定于该角色的数据进行专业化呢?不幸的是,不可能改变设计,我需要在这种情况下找到解决方案:(那太糟糕了。我不知道这种情况是否可能,同时仍然表现得“不错”。您是否在保存和刷新分发服务器之前尝试清除会话?如果所有操作都失败,您可能会发出一些难看的SQL以在分发服务器表中插入一行(假设每个子类的表继承策略),从而欺骗了NHibernate。角色存在于设计中。但我需要分发服务器的附加字段。继承用于使用户实体更广泛。但为什么不将您的角色抽象化,并附带特定于该角色的任何数据?不幸的是,不可能更改设计,我需要在中找到解决方案这种情况:(那太糟糕了。我不知道这种情况是否可能,但仍然表现得“很好”。在保存和刷新分发服务器之前,您是否尝试过清除会话?如果所有操作都失败,您可能会发出一些难看的SQL来在分发服务器表中插入一行(假设每个子类的表继承策略),从而欺骗了尼伯内特。