Я пытаюсь решить проблему, когда я сопоставляю сущности EF с POCO, которые служат DTO.
У меня есть две таблицы в моей базе данных, скажем, Продукты и Категории.Товар относится к одной категории, и одна категория может содержать много товаров.Мои объекты EF называются efProduct и efCategory.Внутри каждой сущности существует надлежащее свойство навигации между efProduct и efCategory.
Мои объекты Poco просты
public class Product
{
public string Name { get; set; }
public int ID { get; set; }
public double Price { get; set; }
public Category ProductType { get; set; }
}
public class Category
{
public int ID { get; set; }
public string Name { get; set; }
public List<Product> products { get; set; }
}
Чтобы получить список продуктов, я могу сделать что-то вроде
public IQueryable<Product> GetProducts()
{
return from p in ctx.Products
select new Product
{
ID = p.ID,
Name = p.Name,
Price = p.Price
ProductType = p.Category
};
}
Однако есть ошибка несоответствия типов, потому чтоp.Category имеет тип efCategory.Как я могу решить это?То есть как я могу преобразовать p.Category в тип Category?
Аналогично, когда я
return from c in ctx.Categories
where c.ID == id
select new Category
{
ID = c.ID,
Name = c.Name,
ProductList = c.Products;
};
получаю несоответствие, потому что ProductList имеет тип Product, где c.Products являетсяEntityCollection
Я знаю, что в .NET EF добавлена поддержка POCO, но я вынужден использовать .NET 3.5 SP1.