0

我正在开发一个应用程序,其中数据是从 edmx 实体访问的,并且我们必须在从 edmx 实体检索数据后填充每个业务实体,例如:-

var tblproducts = tblproductsData
            .Select(t => new tblProduct()
                {
                    CategoryID = t.CategoryID,
                    Description = t.Description,
                    ID = t.ID,
                    Image = t.Image,
                    InsDt = t.InsDt,
                    Price = t.Price,
                    Quantity = t.Quantity,
                    Status = t.Status,
                    Title = t.Title,
                    tblCategory = new EFDbFirst.Models.tblCategory()
                        {
                            ID = t.tblCategory.ID,
                            status = t.tblStatus.StatusID,
                            Title_Category = t.tblCategory.Title_Category
                        },
                    tblStatu = new EFDbFirst.Models.tblStatu()
                        {
                            StatusDescription = t.tblStatus.StatusDescription
                            ,
                            StatusID = t.tblStatus.StatusID
                        }
                });

我对此感到厌烦,因为每次我必须在获取数据并在数据库中设置数据时将一个转换为另一个,有没有什么好的方法来创建一些采用一种匿名类型并将其转换为另一种匿名类型的常见方法。

提前致谢

4

1 回答 1

0

你的例子不是很清楚。

首先,EF 本身不适用于匿名类型,它适用于您首先使用 edmx 文件或代码定义的 EF 类型。但是,您可以通过定义 Select 语句自己创建匿名类型。

例如:

var products = context.tblProductsData
               .Select(r => new { Description = r.Description }); //new without typename is an 
                                                                  //anonymous object

tblProduct、tblCategory 和 tblStatu 对象是 EF 类型吗?如果是这样,你就不需要写Select了,EF会在你执行的时候为你生成对象。

例如:

var products = context.tblProductsData.ToList();

这将自动为您生成 tblProduct 对象。当您尝试导航到 tblProduct.tblCategory 或 tblProduct.tblStatu 时,延迟加载将为您检索它们。如果您想在第一次查询(急切加载)期间显式加载它们,请使用该Include函数。

例如:

var products = context.tblProductsData.Include(r => r.tblCategory)
                                      .Include(r => r.tblStatu).ToList();

但是,如果 tblProducts、tblCategory 和 tblStatu 是业务对象而不是 EF 类型,则没有其他方法可以做到这一点,您必须在 Select 语句中显式创建它们。

于 2013-04-01T13:08:35.157 回答