Проблема отображения EF CTP5 при использовании базового класса Entity - PullRequest
1 голос
/ 23 февраля 2011

У меня странная проблема с отношениями «многие ко многим» в 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 или в моей реализации что-то не так? Если это ошибка, у вас есть предложение обойти?

1 Ответ

1 голос
/ 23 февраля 2011

Я столкнулся с той же проблемой, только с ассоциацией «многие к одному».См. этот ответ

В двух словах: не используйте базовый класс сущностей, пока это не исправлено;вместо этого вы можете использовать интерфейс для свойства Id.

...