2015-04-17 2 views
0

Я пытаюсь сопоставить отношение многих ко многим с Fluent NHibernate, но оно не работает для меня. Я сопоставляю объекты с помощью AutoMapper. Я получаю эту ошибку при попытке сопоставить;Fluent/Nhibernate: не удалось получить моментальный снимок

{ "не удалось получить снимок: [Models.AccountsGroup_Accounts # Models.AccountsGroup_Accounts] [SQL: ВЫБРАТЬ chartofacc_.fkGroupID, chartofacc_.fkAccountID ОТ AccountsGroup_Accounts chartofacc_ ГДЕ chartofacc_.fkGroupID = и chartofacc_.fkAccountID? =?] "}

Столы;

1. Accounts (table name) 
    AccountID, 
    AccountName 

2. AccountsGroup (table name) 
    AccountGroup_ID, 
    GroupName 

3. AccountsGroup_Accounts (table name) 
    fkAccountsID, 
    fkAccountsGroup_ID 

Таблица AccountsGroup_Accounts проводит только первичные ключи счетов и AccountsGroup таблицы как forigen ключи, но и сделать составной ключ из них для себя.

Модельные классы;

public class Account 
     { 
      public virtual int Id { get; set; } 
      public virtual string AccountName { get; set; } 
      public virtual IList<AccountGroup> AccountGroups { get; set; } 
     } 
public class AccountGroup 
    { 
     public virtual int Id { get; set; } 
     public virtual string GroupName { get; set; } 
     public virtual IList<Account> Accounts { get; set; } 
    } 

public class AccountsGroup_Accounts 
    { 
     public virtual Account Accounts { get; set; } 
     public virtual AccountGroup AccountGroups { get; set; } 

     public override bool Equals(object obj) 
     { 
      if (obj == null) 
       return false; 
      var compare = obj as AccountsGroup_Accounts; 
      if (compare == null) 
       return false; 

      return (Accounts.Id == compare.Accounts.Id && AccountGroups.Id == compare.AccountGroups.Id); 
     } 
     public override int GetHashCode() 
     { 
      return (Accounts.Id + "|" + AccountGroups.Id).GetHashCode(); 
     } 
    } 

Отображение является;

public AccountGroupMapping() 
     { 
      SetEntityProperties("AccountGroups", "Group_ID"); 
      Map(x => x.GroupName); 
      HasManyToMany<Account>(x => x.Accounts) 
      .Table("AccountsGroup_Accounts") 
      .ParentKeyColumn("fkGroupID") 
      .ChildKeyColumn("fkAccountID") 
      .LazyLoad(); 
     } 
public AccountMapping() 
     { 
      SetEntityProperties("Accounts", "AccountID"); 
      Map(x => x.AccountName); 
      HasManyToMany<AccountGroup>(x => x.AccountGroup) 
      .Table("AccountsGroup_Accounts") 
      .ParentKeyColumn("fkAccountID") 
      .ChildKeyColumn("fkGroupID") 
      .LazyLoad(); 
     } 
public AccountsGroup_Accounts() 
     { 
      Table("AccountsGroup_Accounts"); 
      CompositeId().KeyReference(x => x.AccountGroup, "fkGroupID") 
       .KeyReference(x => x.Account, "fkAccountID"); 
     } 

Номера классы модели (они генерируются из xsd2code);

public partial class Accounts 
    { 
     public int AccountIdField {get; set;} 
     public string accountNameField {get; set;} 
    } 
public partial class AccountGroup 
    { 
     public int accountGroupIdField {get; set;} 
     public string groupNameField {get; set;} 
    } 
public partial class AccountsGroup_Accounts 
    { 
     public int AccountGroupsRefId {get; set;} 
     public int AccountsRefId { get;set;} 
    } 

И это, как я их отображения:

AutoMapper.Mapper.CreateMap<Account, Models.Account>() 
       .ForMember(x => x.Vat, opt => opt.ResolveUsing(new VatRefIdResolver(loadRepository)).FromMember(x => x.VatRefId)); 
AutoMapper.Mapper.CreateMap<AccountGroup, Models.AccountGroup>(); 

AutoMapper.Mapper.CreateMap<AccountsGroup_Accounts, Models.AccountsGroup_Accounts>() 
       .ForMember(x => x.Account, opt => opt.ResolveUsing(new AccountResolver(loadRepository)).FromMember(x => x.AccountRefId)) 
       .ForMember(x => x.AccountGroup, opt => opt.ResolveUsing(new AccountGroupIdResolver(loadRepository)).FromMember(x => x.AccountGroupRefId)); 

Так это то, что я сделал до сих пор. Теперь я не знаю, что и где я чего-то не хватает, а что еще нужно сделать, чтобы решить эту проблему или сопоставить многие-ко-многим.

Буду очень признателен, если кто-то поможет мне определить проблему.

ответ

1

Я сам обнаружил проблему. Я получил ошибку, потому что имя таблицы соединений было неправильным. Предположим, что это AccountsGroupRelation вместо AccountsGroup_Accounts.

Как только я исправил это, все приступило к работе.

Смежные вопросы