【发布时间】:2022-01-22 05:18:20
【问题描述】:
我有一个 .NET 应用程序,用户可以在其中创建/编辑他们的过滤器和第二个控制台应用程序,它作为后台任务运行并应用他们的过滤器。
我扩展了Application使用类:
public class ApplicationUser : IdentityUser
{
public ApplicationUser()
{
Filters = new List<FilterData>();
}
[SqlDefaultValue(DefaultValue = 0)]
public long Credit { get; set; }
public virtual ICollection<FilterData> Filters { get; set; }
}
我的控制台应用程序创建了一个DbContext 并尝试使用Filters 属性:
static void Main(string[] args)
{
var contextOptions = new DbContextOptionsBuilder<ApplicationDbContextEx>()
.UseSqlServer(@"connection string....")
.Options;
ApplicationDbContextEx context = new ApplicationDbContextEx(contextOptions);
foreach (var user in context.Users.ToList())
{
// Filters
Debug.Assert(user.Filters != null, "weird because we have filters in db");
}
}
我的问题是user.Filters 始终为空,即使数据库中有有效的过滤器。
我猜这是创建 DbContext 的问题。
感谢您的帮助!
【问题讨论】:
-
过滤器是否真的与在该循环中使用的用户相关联?
-
您在 foreach 循环中使用 Assert.Debug,更准确的断言应该是:
Debug.Assert(context.Users.All(x => x.Filters == null),"weird because we have filters in db"); -
Debug.Assert 在我的真实代码中不存在我添加它只是为了显示错误!
标签: c# entity-framework