У меня возникли проблемы с получением Entity Framework для обработки отношений «многие ко многим» в моей схеме данных.Вот моя модель:
public class User
{
public int UserId { get; set; }
public int Username { get; set; }
public IEnumerable<Customer> Customers { get; set; }
...
}
public class Customer
{
public int CustomerId { get; set; }
...
}
public class CustomerUser
{
public int CustomerUserId { get; set; }
public int CustomerId { get; set; }
public int UserId { get; set; }
public DateTime CreatedTimestamp { get; set; }
...
}
Вот отображение:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<User>().HasKey(u => u.UserId).ToTable("Users");
modelBuilder.Entity<Customer>().HasKey(c => c.CustomerId).ToTable("Customer");
modelBuilder.Entity<CustomerUsers>().HasKey(cu => cu.CustomerUserId).ToTable("CustomerUsers");
modelBuilder.Entity<CustomerUsers>()
.HasRequired(cu => cu.User)
.WithRequiredDependent()
.Map(m =>
{
m.ToTable("Users");
m.MapKey("CustomerUsers.UserId");
});
}
В моей базе данных есть таблица Users, Customers и CustomerUsers со столбцами, которые соответствуют модели.
Я пытаюсь выполнить следующий запрос:
result = (from u in context.Users
join customerUsers in context.CustomerUsers on u.UserId equals customerUsers.User.UserId
join customers in context.Customers on customerUsers.CustomerId equals customers.CustomerId into ps
select new
{
User = u,
Customers = ps
}).ToList().Select(r => { r.User.Customers = r.Customers.ToList(); return r.User; });
Когда я запускаю код, я получаю следующую ошибку:
The Column 'CustomerUserId' specified as part of this MSL does not exist in MetadataWorkspace
Может кто-нибудь увидеть, что не так с моим подходом?
Спасибо!
Следует отметить, что я намеренно пытаюсь не включать ссылку на таблицу CustomerUsers из класса Customer или User.В большинстве случаев полезная нагрузка таблицы CustomerUsers не важна, только то, какие клиенты связаны с какими пользователями.В некоторых сценариях отчетности требуется дополнительная информация в таблице соединений, но, поскольку это не типичная ситуация, я хотел бы избежать загромождения моделей, имея эту дополнительную косвенность.