【发布时间】:2016-08-01 18:21:35
【问题描述】:
我有两个模型:
public class User
{
public int Id { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public Role Role { get; set; }
public int RoleId { get; set; }
}
public class Role
{
public int Id { get; set; }
public string Name { get; set; }
}
引起你的注意用户类包含:
public Role Role { get; set; }
如果我使用此代码:
User user = db.Users.Include(u => u.Role).FirstOrDefault(u => u.UserID == model.UserId);
它工作正常,返回User 和Role。
然后我查看EF生成的SQL查询,看起来是这样的:
@UserID int
AS
SELECT
[Limit1].[Id] AS [Id],
[Limit1].[Email] AS [Email],
[Limit1].[Password] AS [Password],
[Limit1].[RoleId] AS [RoleId],
[Limit1].[Id1] AS [Id1],
[Limit1].[Name] AS [Name]
FROM
(SELECT TOP (1)
[Extent1].[Id] AS [Id],
[Extent1].[Email] AS [Email],
[Extent1].[Password] AS [Password],
[Extent1].[RoleId] AS [RoleId],
[Extent2].[Id] AS [Id1],
[Extent2].[Name] AS [Name]
FROM
[dbo].[Users] AS [Extent1]
INNER JOIN
[dbo].[Roles] AS [Extent2] ON [Extent1].[RoleId] = [Extent2].[Id]
WHERE
[Extent1].[UserID] = @UserID) AS [Limit1]
END
我复制了这个 SQL 并创建了一个存储过程,在 SQL Server Management Studio 中测试,它运行良好。
然后我使用我的存储过程,C#代码:
SqlParameter param = new SqlParameter("@UserID", UserId);
var U = Database.SqlQuery<User>("User_GetUserWithRole @UserID", param);
然后有一个问题,U包含Role = null。为什么?
【问题讨论】:
-
使用
db.Users.SqlQuery("your procedure").ToList(); -
@techspider
.ToList()没有帮助 -
不仅仅是
ToList()。密切关注它;SqlQuery在entity而不是Database上执行 -
请密切关注我最初提供的建议; entity 并不意味着在你的代码中寻找实体;
标签: c# sql-server entity-framework stored-procedures