Я столкнулся с проблемой при попытке удалить отношение многие ко многим с помощью Fluent Nhibernate. У меня есть следующие классы домена:
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, представляющий отношения «многие ко многим» между организациями.
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; }
}
Это сценарий для таблиц:
Организационный стол:
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]
Таблица связей организации:
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:
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]
Все работает, как я ожидаю, но когда я пытаюсь удалить отношение, свободный Nhibernate пытается установить для CompanyId значение NULL для этой конкретной записи вместо удаления записи из таблицы CompanyRelationship. Вот запрос, который я вижу в NHProf:
UPDATE CompanyRelationship
SET CompanyId = null
WHERE CompanyId = 3893 /* @p0 */
AND Id = 487 /* @p1 */
Чтобы удалить запись, я вызываю функцию RemoveRelatedCompany, которая удаляет конкретную CompanyRelationship из списка relatedCompanies, а затем я вызываю Session.Save () и Session.Flush (), чтобы сохранить сущность Company.
Есть идеи относительно того, что я делаю здесь неправильно, из-за чего это поведение?