gpt4 book ai didi

c# - LazyLoading 关闭时从 IdentityUser 访问导航属性

转载 作者:太空狗 更新时间:2023-10-29 22:18:56 25 4
gpt4 key购买 nike

我使用代码优先模型进行了此设置:

public class TestContext :IdentityDbContext<TestUser>
{
public TestContext()
: base("TestConnection")
{
this.Configuration.LazyLoadingEnabled = false;

}

public DbSet<Customer> Customers{get;set;}

}

public class TestUser : IdentityUser
{
public virtual Customer Customer { get; set; }
}

public class Customer
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName {get; set;}
}

我扩展了 IdentityUser 以包含“客户”类的实例。

现在考虑这段代码:

var user = UserManager.FindById("some id");                  
if (user != null)
{
string str=user.Customer.FirstName; //since lazy loading is off, user.Customer is null and hence gives null reference exception.
}

由于延迟加载关闭,user.Customer 为空,因此给出空引用异常。如果有人可以帮助我在 LazyLoading 关闭时访问 IdentityUser 的导航属性,我会很高兴。

谢谢。

最佳答案

如果您总是想在不使用延迟加载的情况下加载相关数据,那么您将需要编写自己的 UserStore 实现并将其插入到您的 UserManager 中。例如..

public class ApplicationUserStore : UserStore<TestUser>
{
public ApplicationUserStore(TestContext context) : base(context)
{
}

public override TestUser FindByIdAsync(string userId)
{
return Users.Include(c => c.Customer).FirstOrDefault(u => u.Id == userId);
//you may want to chain in some other .Include()s like Roles, Claims, Logins etc..
}
}

然后当您创建您的 UserManager 时,插入 UserStore 的这个实现,您的 Customer 数据将与用户一起加载..这可能看起来像..

public class TestUserManager : UserManager<TestUser>
{
public TestUserManager() : base(new ApplicationUserStore(new TestContext()))
{
}

}

根据您的项目,UserManager 实现会有所不同。

关于c# - LazyLoading 关闭时从 IdentityUser 访问导航属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26324550/

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