0

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

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 项目中创建强类型视图吗?

4

1 回答 1

5

他们的意思是您不想使用实际的实体类型作为投影。例如,您不应该从 Person 实体投影到 Address 实体。

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

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

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

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

于 2013-03-27T18:47:57.720 回答