我正在尝试解决将EF实体映射到充当DTO的POCO的问题。
我的数据库中有两个表,分别是“产品”和“类别”。一个产品属于一个类别,一个类别可能包含许多产品。我的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。
最佳答案
return from p in ctx.Products
select new Product
{
ID = p.ID,
Name = p.Name,
Price = p.Price
ProductType = new Category
{
ID = p.Category.ID,
Name = p.Category.Name // etc.
}
};
对于
Category
,您可以执行以下操作: return from c in ctx.Categories
where c.ID == id
select new Category
{
ID = c.ID,
Name = c.Name,
ProductList = from p in c.Products
select new Product
{
ID = p.ID,
Name = p.Name,
Price = p.Price
}
};
关于c# - EFv1将1映射到许多与POCO的关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3009675/