nHibernate HasMany с присоединяемой таблицей

Я пытаюсь создать отношения «один ко многим» с таблицей соединений, и мне трудно это сделать. Ниже представлена ​​структура таблиц 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, которое неверно.


person delucaezequiel    schedule 13.10.2020    source источник
comment
Это не один ко многим, а многие ко многим. Помогает ли это?   -  person jeroenh    schedule 13.10.2020
comment
да, это «многие ко многим», но у меня была такая же ошибка с родительскими и дочерними ссылками, поэтому я пытался таким образом.   -  person delucaezequiel    schedule 17.10.2020