我正在使用LINQ生成一个简单的查询。 我的模特是
public class Employee
{
public int EmployeeId {get; set;}
public string FirstName {get; set;}
[Required]
public string LastName {get; set;}
}
我的LINQ查询是
var q = db.Employees.Where (i => i.LastName != null);
此查询将转换为以下SQL(请参阅没有where
子句)
SELECT
[Extent1].[EmployeeId ] AS [EmployeeId],
[Extent1].[FirstName] AS [FirstName],
[Extent1].[LastName] AS [LastName]
FROM [dbo].[Employees] AS [Extent1]
如果从模型中删除Required
属性,则SQL查询会添加Where
子句。所以,我假设LINQ通过删除where子句来优化查询。但我想保留Required
属性并希望使用LINQ。有什么工作吗?
由于我正在使用旧数据库,因此我有一些LastName
为空的记录。但我想添加Required
字段,以便所有新记录都包含LastName
的值。
答案 0 :(得分:2)
我假设您使用代码优先生成数据库。似乎正在发生的是你在一个不可空的数据库列中添加IS NOT NULL
条件,而EF似乎正在优化。
如果DB列不可为空,那么使用IS NOT NULL
WHERE
子句是没有意义的。
如果您的数据库列可以为空,但您希望模型需要值,则可能需要添加另一个层以将域模型与数据库模式分开。 EF旨在尽可能地为您的数据模式建模。如果要应用与数据约束不同的业务规则,则可能需要在ViewModel中使用(或适用于您的体系结构的任何内容)。