将实体类型映射到投影

时间:2013-03-27 18:35:55

标签: c# linq entity-framework entity

我正在阅读教程,他们说你不应该使用实体类型来映射到投影。所以这样的东西是不允许的(产品是实体创建的类):

from p in db.Products
               where p.ProductID== ProductID
               select new Product { Name = p.Name};

所以我会创建一个类似这样的新类:

public string Name { get; set; }

然后使用如下查询:

from p in db.Products
            where p.ProductID == ProductID
            select new SomeNewClassName { Name = p.Name });

这真的有必要吗,还是这只是额外的工作?如果我要创建这个类,它将保存与我的实体对象完全相同的属性,那么重点是什么呢?如果需要,我对这个新类使用的命名约定是什么,因为它几乎与我的Entity类相同。我也不应该使用实体对象在ASP.net MVC项目中创建强类型视图吗?

1 个答案:

答案 0 :(得分:4)

它们的含义是您不希望将实际实体类型用作投影。例如,您不应该从Person实体投影到Address实体。

投影意味着您正在“塑造”与原始结果不同的结果。如果您只是返回原始实体,那么这不是投影。你只需这样做:

from p in db.Products
        where p.ProductID == ProductID
        select p;

至于观点,没有。通常,您不应将实体直接传递给视图。你不应该有许多哲学和安全理由,但在大多数情况下却不这样做。如果您正在创建一个概念验证,或者它是一个简单的内部应用程序,您可能可以逃脱它,但任何面向互联网的应用程序都不应该。

您应该创建一个单独的视图模型,即使它与实体完全相同。我知道这是额外的工作,但从长远来看,它会得到回报,因为在某些时候你可能想要一个与你的实体不同的视图模型,那么你必须更多地重做工作。