ios*_*s85 0 c# linq entity entity-framework
我正在阅读教程,他们说您不应该使用实体类型来映射到投影。所以这样的事情是不允许的(其中产品是实体创建的类):
from p in db.Products
where p.ProductID== ProductID
select new Product { Name = p.Name};
Run Code Online (Sandbox Code Playgroud)
所以我会创建一个新类,其中包含以下内容:
public string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)
然后使用如下查询:
from p in db.Products
where p.ProductID == ProductID
select new SomeNewClassName { Name = p.Name });
Run Code Online (Sandbox Code Playgroud)
这真的有必要吗,还是只是额外的工作?如果我要创建这个类,它将拥有与我的实体对象完全相同的属性,那么还有什么意义呢?如果需要,我对这个新类使用的命名约定是什么,因为它几乎与我的实体类相同。另外,我不应该使用实体对象在 ASP.net MVC 项目中创建强类型视图吗?
他们的意思是您不想使用实际的实体类型作为投影。例如,您不应该从 Person 实体投影到 Address 实体。
投影意味着您正在“塑造”与原始结果不同的结果。如果您只是返回原始实体,那么这不是投影。你只需这样做:
from p in db.Products
where p.ProductID == ProductID
select p;
Run Code Online (Sandbox Code Playgroud)
至于景色,没有。一般来说,您不应该将实体直接传递到您的视图。有许多哲学和安全原因导致您不应该这样做,但在大多数情况下就是不这样做。如果您正在创建概念验证,或者它是一个简单的内部应用程序,您可能可以摆脱它,但任何面向互联网的应用程序都不应该这样做。
您应该创建一个单独的视图模型,即使它与实体完全相同。我知道这是额外的工作,但从长远来看它是有回报的,因为在某些时候你可能想要一个与你的实体不同的视图模型,然后你必须重新做更多的事情。