В EF Code-first могут ли три объекта совместно использовать одну и ту же соединительную таблицу? - PullRequest
1 голос
/ 14 февраля 2011

Учитывая следующую ситуацию, Entity Framework Code first-name пропускает / переименовывает таблицу соединений или соединения.

public class User () {
 //all fields from Users table
 //...
 //Role collection from Roles table through UserRoleLinks table
 public List<Role> Roles { get; set; }
} 

public class AppUser() {
 //subset of fields from Users through AppUsers View
 //...
 //Role collection from Roles table through UserRoleLinks table
 public List<Role> Roles { get; set; }
}

И пользователь, и пользователь AppUser имеют следующую запись конфигурации:

this.HasMany(e => e.Roles)
    .WithMany().Map(m => {
        m.MapLeftKey(a => a.Id, "Users_Id");
        m.MapRightKey(b => b.Id, "Roles_Id");
        m.ToTable("UserRoleLinks");
});

Во время выполнения я получаю следующую ошибку при попытке использовать AppUsers (DbSet ).

"Неверное имя объекта 'dbo.UserRoleLinks1'.""Неверное имя объекта 'dbo.UserRoleLinks1'."

Похоже, что конфигурация с кодом вначале увеличивает имя таблицы объединения, потому что она уже существует.

Как я могу получить этоза работой?Есть ли лучший способ получить подмножество столбцов таблицы?

1 Ответ

0 голосов
/ 14 февраля 2011

Я думаю, что это невозможно в EF вообще (не только в первом коде). До тех пор, пока вы не докажете, что это возможно в EDMX, нет причин пытаться сделать это в коде в первую очередь.

Проблема в том, что AppUser - это новая сущность для EF. Теперь у вас есть отношение M: N между пользовательскими <-> ролями и AppUser <-> ролями, и вы хотите отобразить оба отношения M: N в одну соединительную таблицу. Поскольку EF не видит, что AppUser на самом деле является только View / Query поверх таблицы User, он, вероятно, пометит это как недопустимое отображение.

Если вы используете AppUser только для получения подмножества столбцов, используйте вместо этого проекцию в пользовательский тип в запросе linq.

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