gpt4 book ai didi

c# - 延迟加载在 EntityFramework 6 中不起作用

转载 作者:行者123 更新时间:2023-11-30 14:53:23 25 4
gpt4 key购买 nike

我已将以下属性设为真。

Configuration.LazyLoadingEnabled = true;
Configuration.ProxyCreationEnabled = true;

我有两个类(class):

 public partial class User : BaseEntity
{
public User()
{
this.UserRoles = new List<UserRole>();
}

public int UserId { get; set; }
public string FirstName { get; set; }
public virtual ICollection<UserRole> UserRoles { get; set; }
}

public partial class UserRole : BaseEntity
{
public int UserRoleId { get; set; }
public int UserId { get; set; }
public int RoleId { get; set; }
public virtual User User { get; set; }
}

我像这样从 EF 6 调用存储过程:

public IEnumerable<User> GetUserDetails(int? userId)
{
var userIDParameter = userId.HasValue ?
new SqlParameter("@UserId", userId) :
new SqlParameter("@UserId", typeof(int));
return _dbContext.Database
.SqlQuery<User>("usp_GetUserDetails @UserId", userIDParameter);
}

像这样在 Controller 中调用:

IEnumerable<User> user =  _storedProcedureService.GetUserDetails(5);

在我的 SP 中,我的逻辑是:

Select * from User where UserId = @UserId

我获得了与 User 相关的所有数据,但 UserRoles.Count 为零。

我做错了什么?

最佳答案

您询问的是在使用 ADO.NET 时使用 Entity Framework 进行延迟加载。 ADO.NET 不支持延迟加载, Entity Framework 支持。

请注意,这是 ADO.NET;

var userIDParameter = userId.HasValue ?
new SqlParameter("@UserId", userId) :
new SqlParameter("@UserId", typeof(int));
return _dbContext.Database.SqlQuery<User>("usp_GetUserDetails @UserId", userIDParameter);

它使用 SqlParameter 和类似的东西。

这是 Entity Framework ;

using (var db = new MyContext())
{
return db.User.Single(u => u.UserId = id);
}

或者,使用存储过程;

using (var db = new MyContext())
{
return db.GetUserDetails(id);
}

如果想让Entity Framework处理存储过程并且支持Lazy Loading,建议关注this tutorial .

关于c# - 延迟加载在 EntityFramework 6 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29493475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com