У меня странная проблема с отношениями «многие ко многим» в EF CTP5, когда задействован базовый класс. Сначала я покажу вам простое отображение, которое работает.
У меня есть следующие два класса (сущности):
public class Product
{
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Process> Processes { get; set; }
}
public class Process
{
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
И мои классы картирования:
public class ProductMapping : EntityTypeConfiguration<Product>
{
public ProductMapping()
{
ToTable("Products");
HasKey(t => t.ID);
Property(t => t.ID).HasColumnName("product_id");
Property(t => t.Name).HasColumnName("name");
}
}
public class ProcessMapping : EntityTypeConfiguration<Process>
{
public ProcessMapping()
{
ToTable("Processes");
HasKey(t => t.ID);
Property(t => t.ID).HasColumnName("process_id");
Property(t => t.Name).HasColumnName("name");
HasMany(p => p.Products)
.WithMany(p => p.Processes)
.Map(m =>
{
m.ToTable("Product_processes");
m.MapLeftKey(process => process.ID, "process_id");
m.MapRightKey(product => product.ID, "product_id");
});
}
}
Это отображение работает отлично.
Тем не менее, я хочу представить базовый класс для моих сущностей. Для начала я создал следующий базовый класс:
public abstract class Entity
{
public int ID { get; set; }
}
Я сделал мои два объекта Product
и Process
наследуемыми от этого Entity
базового класса и, конечно, удалил свойство ID из каждого класса. Таким образом, эти два объекта идентичны, за исключением того, что свойство ID теперь реализовано в базовом классе.
После компиляции и запуска моего проекта я получаю следующую «знаменитую» ошибку времени выполнения EF:
«Последовательность содержит более одного совпадающего элемента»
Я знаю, что эта ошибка связана с ассоциацией «многие ко многим», потому что, если я удаляю отображение «многие ко многим» из класса Process
, все работает правильно, но без ассоциации, конечно,
Кто-нибудь может увидеть, в чем здесь проблема? Это ошибка CTP5 или в моей реализации что-то не так? Если это ошибка, у вас есть предложение обойти?