提问人:Kirsten 提问时间:11/17/2023 最后编辑:Kirsten 更新时间:11/19/2023 访问量:67
超时已过期。XAF .Net6 Winforms 实体框架核心
Timeout expired. XAF .Net6 Winforms Entity Framework Core
问:
我正在用我的 XAF 23.1.6 EF Core 7.0.3 项目解决为什么在 SQL Server 中打开这么多会话的问题。
在SSMS中,我运行
SELECT *
FROM sys.dm_exec_sessions
WHERE session_id > 50 AND host_name = 'MYCOMPUTER'
ORDER BY last_request_end_time ASC
查看哪些会话处于开放状态。
我从向导中创建了一个具有标准安全性的新项目,并在 Visual Studio IDE 中运行它,同时监视 SSMS 中的会话。
似乎会话数量只会随着我使用该程序而增加。
例如,如果我打开“用户视图”,然后打开“角色视图”,会话会增加。但是,当我关闭这些视图时,会话并没有减少。
如何让 XAF 关闭不需要的会话?
用户体验是超时错误。
[更新]
DbContext 代码是
using DevExpress.ExpressApp.Design;
using DevExpress.ExpressApp.EFCore.DesignTime;
using DevExpress.Persistent.BaseImpl.EF;
using DevExpress.Persistent.BaseImpl.EF.PermissionPolicy;
using Microsoft.EntityFrameworkCore;
namespace MyApp.Module.BusinessObjects;
public class MyAppContextInitializer : DbContextTypesInfoInitializerBase
{
protected override DbContext CreateDbContext()
{
var optionsBuilder = new DbContextOptionsBuilder<MyAppEFCoreDbContext>()
.UseSqlServer(";")
.UseChangeTrackingProxies()
.UseObjectSpaceLinkProxies();
return new MyAppEFCoreDbContext(optionsBuilder.Options);
}
}
[TypesInfoInitializer(typeof(MyAppContextInitializer))]
public class MyAppEFCoreDbContext : DbContext
{
public MyAppEFCoreDbContext(DbContextOptions<MyAppEFCoreDbContext> options) : base(options)
{
}
public DbSet<ModelDifference> ModelDifferences { get; set; }
public DbSet<ModelDifferenceAspect> ModelDifferenceAspects { get; set; }
public DbSet<PermissionPolicyRole> Roles { get; set; }
public DbSet<MyApp.Module.BusinessObjects.ApplicationUser> Users { get; set; }
public DbSet<MyApp.Module.BusinessObjects.ApplicationUserLoginInfo> UserLoginInfos { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.HasChangeTrackingStrategy(ChangeTrackingStrategy.ChangingAndChangedNotificationsWithOriginalValues);
modelBuilder.UsePropertyAccessMode(PropertyAccessMode.PreferFieldDuringConstruction);
modelBuilder.Entity<MyApp.Module.BusinessObjects.ApplicationUserLoginInfo>(
b =>
{
b.HasIndex(
nameof(DevExpress.ExpressApp.Security.ISecurityUserLoginInfo.LoginProviderName),
nameof(DevExpress.ExpressApp.Security.ISecurityUserLoginInfo.ProviderUserKey))
.IsUnique();
});
modelBuilder.Entity<ModelDifference>()
.HasMany(t => t.Aspects)
.WithOne(t => t.Owner)
.OnDelete(DeleteBehavior.Cascade);
}
}
[更新]
GitHub 上的演示项目 这里
答: 暂无答案
评论