首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保存孩子时的nHibernate继承问题

保存孩子时的nHibernate继承问题
EN

Stack Overflow用户
提问于 2009-02-27 10:09:19
回答 1查看 782关注 0票数 1

我有个问题:我有用户:

代码语言:javascript
复制
[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; }
}

和一种分配器:

代码语言:javascript
复制
 [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,更新)。但不起作用。有什么办法解决吗?

EN

回答 1

Stack Overflow用户

发布于 2009-02-27 11:19:30

错误是这样说的-您的会话包含一个带有该Id的User实例,因此当您尝试使用该Id保存另一个User ( Distributor)时,NHibernate会发出抱怨。您可以尝试在保存session.Clear()之前清除会话( Distributor ),但我不知道NHibernate是否会突然成功地保存到UserDistributor表。

如果您能够更改您的设计,我建议您这样做--通常,当您的专业类型可能更改时,您不应该使用继承。在您的域中引入某种Role是更好、更方便的。

也许我可以给您一些灵感,尽管我不知道您的领域的具体情况:让用户成为User的实例怎么样?然后,User可以封装一个IList<Role>,您可以将Role专门化为例如Distributor (以及其他相关角色)?

或者让您的公司包含一个IList<Distributor>,每个User指向一个

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/594187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档