ошибка при использовании интерфейсов для сущностей Entity Framework (4.2) - PullRequest
7 голосов
/ 05 января 2012

Я использую последнюю версию Entity Framework (4.2) и пытаюсь реализовать интерфейсы для моих сущностей и по какой-то причине не компилируется.выдает ошибку "Cannot convert expression type ICollection<IOrder> to return type ICollection<Order>".если я не использую интерфейсы для сущностей, то я не получаю эту ошибку.

У меня есть отдельный проект для интерфейсов (для репозиториев, сервисов и т. Д.), И мне нужно передать объекты EF в этих методах в качестве параметров, и я не хочу передавать в них фактические объекты, потому что это будеттребовать, чтобы интерфейсный проект имел зависимость от сущностей EF.

моя цель в некоторой степени аналогична той, которая упоминается в этом посте Могу ли я абстрагировать Entity Framework от моих сущностей?

вот образец.Я просто поставил образец здесь, мои действительные сущности разные, но проблема та же.

public interface IOrder
{
    int OrderId { get; set; }
    int CustomerId { get; set; }
    ICustomer Customer { get; set; }
}

public class Order : IOrder
{
    public int OrderId { get; set; }
    public int CustomerId { get; set; }
    ICustomer Customer { get; set; }
}

public interface ICustomer
{
    int CustomerId { get; set; }
    ICollection<IOrder> Orders { get; set; }
}

public class Customer : ICustomer
{
    public int CustomerId { get; set; }
    ICollection<IOrder> Orders { get; set; }
}

public class OrderMap : EntityTypeConfiguration<Order>
{
    this.HasOptional(t => t.Customer)
    .WithMany(t => t.Orders) //error comes from this line
    .HasForeignKey(d => d.CustomerId);
}

Ответы [ 2 ]

7 голосов
/ 05 января 2012

Entity Framework не умеет работать с интерфейсами.В ваших свойствах навигации должны использоваться типы реальных объектов (сопоставленные классы).

1 голос
/ 12 марта 2013

«Вы можете добавить свои собственные файлы частичных классов, чтобы указать интерфейсы, которые должны быть реализованы, - и предоставить любые необходимые методы реализации» - как предложено здесь

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