Я пытаюсь создать отношения «один ко многим» с таблицей соединений, и мне трудно это сделать. Ниже представлена структура таблиц Entities и Maps в C#.
CREATE TABLE tbl_configurations
(
strCode uniqueidentifier default NEWID(),
strName nvarchar(MAX) NOT NULL,
.....
CONSTRAINT pk_configurations PRIMARY KEY (strCode)
)
CREATE TABLE tbl_environments
(
strCode uniqueidentifier default NEWID(),
strName nvarchar(15) NOT NULL,
strDescription nvarchar(MAX) NOT NULL
CONSTRAINT pk_environments PRIMARY KEY (strCode)
)
CREATE TABLE tbl_configurationsenvironments
(
strConfiguration uniqueidentifier NOT NULL,
strEnvironment uniqueidentifier NOT NULL
CONSTRAINT pk_configurationsenvironments PRIMARY KEY (strConfiguration, strEnvironment),
CONSTRAINT fk_configurationsenvironmentsconfigurations FOREIGN KEY (strConfiguration) REFERENCES tbl_configurations(strCode),
CONSTRAINT fk_configurationsenvironmentsenvironments FOREIGN KEY (strEnvironment) REFERENCES tbl_environments(strCode)
)
public class ConfigurationEntity
{
public virtual Guid strCode { get; set; }
public virtual string strName { get; set; }
.....
public virtual ISet<EnvironmentEntity> colEnvironments { get; set; }
}
public class EnvironmentEntity
{
public virtual Guid strCode { get; set; }
public virtual string strName { get; set; }
public virtual string strDescription { get; set; }
}
public class EnvironmentMap : ClassMap<EnvironmentEntity>
{
public EnvironmentMap()
{
Table("tbl_environments");
Id(x => x.strCode).GeneratedBy.Guid();
Map(x => x.strName);
Map(x => x.strDescription);
Not.LazyLoad();
}
}
public class ConfigurationMap : ClassMap<ConfigurationEntity>
{
public ConfigurationMap()
{
Table("tbl_configurations");
Id(x => x.strCode).GeneratedBy.Guid();
Map(x => x.strName);
Join("tbl_configurationsenvironments", m =>
{
m.Fetch.Join();
m.KeyColumn("strConfiguration");
m.HasMany<EnvironmentEntity>(x => x.colEnvironments)
.AsSet()
.Cascade.All()
.KeyColumn("strCode")
.Fetch.Join()
.Not.LazyLoad();
});
Not.LazyLoad();
}
}
Судя по тому, что я вижу в консоли, она правильно отображает отношения между tbl_configurations и tbl_configurationsenvironments.
tbl_configurations config11_ левое внешнее соединение
Однако он не устанавливает должным образом отношения между tbl_environments и tbl_configurationenvironments.
левое внешнее соединение tbl_environments colenviron12_ on confi11_.strCode=colenviron12_.strCode
вместо этого он устанавливает связь между tbl_configurations и tbl_environments. Я почти уверен, что ошибка находится в ConfigurationMap, особенно в этом разделе:
m.HasMany<EnvironmentEntity>(x => x.colEnvironments)
.AsSet()
.Cascade.All()
.KeyColumn("strCode")
.Fetch.Join()
.Not.LazyLoad();
});
Знаете ли вы, как я могу указать, что связь между tbl_configurationsenvironments.strEnvironments? Я пытаюсь использовать .PropertyRef(strEnvironment), однако, когда я это делаю, он ищет свойство в tbl_configurations, которое неверно.