首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fluent-Nhibernate多对多关系问题

Fluent-Nhibernate多对多关系问题
EN

Stack Overflow用户
提问于 2010-08-04 16:21:37
回答 2查看 355关注 0票数 0

我在尝试使用Fluent Nhibernate删除多对多关系时遇到了一个问题。我有以下域类:

代码语言:javascript
复制
public class Organisation
{
   public virtual int Id {get; set;}

   private IList<OrganisationRelationshiop> relatedOrganisations; 

   public virtual IList<OrganisationRelationship> RelatedOrganisation
   {
       get
       {
           return this.relatedOrganisations;
       }

      protected set
      {
           this.relatedOrganisations = value;
      }
    }


    public virtual void RemoveRelatedOrganisation(OrganisationRelationship organisationRelationship)
    {
        this.relatedOrganisations.Remove(organisationRelationship);
    }

}

这是我的OrganisationRelationship类,它代表了组织之间的多对多关系。

代码语言:javascript
复制
   public class OrganisationRelationship 
   {
       public virtual int Id {get; set;}

       public virtual Organisation Organisation{ get; set; }

       public virtual OrganisationRelationshipType OrganisationRelationshipType { get; set; }

       public virtual Organisation RelatedOrganisation { get; set; }
   }

下面是表的脚本:

组织机构表:

代码语言:javascript
复制
CREATE TABLE [dbo].[Organisation](
[Id] [int] IDENTITY(1,1) NOT NULL,
[OrganisationName] [nvarchar](200) NOT NULL,
CONSTRAINT [PK_Organisation] PRIMARY KEY CLUSTERED 
(
[Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF,    ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

OrganisationRelationshop表:

代码语言:javascript
复制
CREATE TABLE [dbo].[OrganisationRelationship](
[Id] [int] IDENTITY(1,1) NOT NULL,
[OrganisationId] [int] NOT NULL,
[RelatedOrganisationId] [int] NOT NULL,
[OrganisationRelationshipTypeId] [int] NOT NULL,
CONSTRAINT [PK_OrganisationRelationship] PRIMARY KEY CLUSTERED 
(
[Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF,        ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

OrganisationRelationType表:

代码语言:javascript
复制
CREATE TABLE [dbo].[OrganisationRelationshipType](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_OrganisationRelationshipType] PRIMARY KEY CLUSTERED 
(
[Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF,    ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

一切正常,但当我尝试删除关系时,fluent Nhibernate会尝试将该特定记录的CompanyId设置为null,而不是从CompanyRelationship表中删除该记录。下面是我可以在NHProf中看到的查询:

代码语言:javascript
复制
UPDATE CompanyRelationship
SET    CompanyId = null
WHERE  CompanyId = 3893 /* @p0 */
AND Id = 487 /* @p1 */

为了删除记录,我调用了RemoveRelatedCompany函数,该函数从relatedCompanies列表中删除特定的CompanyRelationship,然后调用Session.Save()和Session.Flush()来保存公司实体。

我在这里做错了什么,有什么想法是因为这个行为?

EN

回答 2

Stack Overflow用户

发布于 2010-08-04 21:54:58

当我使用AutoMapping时,我必须覆盖组织的映射,如下所示来解决这个问题:

mapping.HasMany(c => c.RelatedOrganisations).Inverse().ForeignKeyCascadeOnDelete().Table("OrganisationRelationship");

票数 1
EN

Stack Overflow用户

发布于 2010-08-04 21:00:08

可能您必须在映射上设置.Cascade.AllDeleteOrphan();(cascade=“all-delete- on”)。

此外,如果您发布您的映射将更容易回答您

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

https://stackoverflow.com/questions/3403762

复制
相关文章

相似问题

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