FluentNHibernate / NHibernate Исключение: в этом конструкторе SQL уже добавлен столбец StaffID - PullRequest
0 голосов
/ 30 октября 2019

Я работаю с устаревшей базой данных, где у меня есть две таблицы (Staff, Rights) и объединенная таблица (StaffRights). Я хочу отобразить отношения один ко многим / присоединиться к сотрудникам и сотрудникам. Я использовал полдня, пытаясь выяснить это

С текущим кодом я получаю следующее исключение:

Exception thrown: 'FluentNHibernate.Cfg.FluentConfigurationException' in 
FluentNHibernate.dll

Additional information: An invalid or incomplete configuration was used 
while creating a SessionFactory. Check PotentialReasons collection, and 
InnerException for more detail.

Inner exception:System.ArgumentException: The column 'StaffID' has already been added in this SQL builder Parameter name: columnName at NHibernate.SqlCommand.SqlInsertBuilder.AddColumnWithValueOrType(String 
columnName, Object valueOrType) at NHibernate.SqlCommand.SqlInsertBuilder.AddColumns(String[] 
columnNames, Boolean[] insertable, IType propertyType)
   at NHibernate.Persister.Entity.AbstractEntityPersister.GenerateInsertString(Boolean identityInsert, Boolean[] includeProperty, Int32 j)}

Table1 --> Staff
StaffID: PK
Name

Table2 --> StaffRights
SRID: PK
StaffID:FK
RightID:FK
CreatedTS

Table3 -->Rights
RightID: PK
RightName


public class Staff
{
    public virtual int Id { get; protected set; }
    public virtual string Name { get; set; }

    public virtual IList<StaffRights> RightsAssociation { get; set; }
    public Staff()
    {
        RightsAssociation = new List<StaffRights>();
    }
}

public class StaffRights
{
    public virtual int Id { get; protected set; }
    public virtual int StaffID { get; set; }
    public virtual int RightID { get; set; }
    public virtual Staff Staff { get; set; }
}

public class StaffMap : ClassMap<Staff>
{
    public StaffMap()
    {
        Id(x => x.Id).Column("StaffID").GeneratedBy.Native();
        Map(x => x.Name);
        HasMany(x => x.RightsAssociation).KeyColumn("StaffID");
        Table("Staff");
    }
}

public class StaffRightsMap: ClassMap<StaffRights>
{
    public StaffRightsMap()
    {
        Id(x => x.Id).Column("SRID").GeneratedBy.Native();
        Map(x => x.StaffID);
        Map(x => x.RightID);
        References(x => x.Staff).Column("StaffID");
        Table("StaffRights");
    }
}

_sessionFactory = Fluently.Configure()
                 .Database(MsSqlConfiguration.MsSql2008.ConnectionString(connStr))
.Mappings(m =>
{
    m.FluentMappings.AddFromAssemblyOf<Staff>();

    m.FluentMappings.AddFromAssemblyOf<StaffRights>();
})
.BuildSessionFactory();

Я удалил

References(x => x.Staff).Column("StaffID");

ИЯ могу получить некоторые результаты от:

var staff = session.Get<Staff>(2);
var rights = staff.RightsAssociation;
var f = rights.First();

Однако, как я понимаю, отображение должно быть двунаправленным. Что я неправильно понял?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...