【发布时间】:2019-09-16 23:48:09
【问题描述】:
我有两个DbContext 课程。 ServerContext 具有 UserContext 的外键。
服务器上下文:
public ServerContext(DbContextOptions<ServerContext> options)
: base(options) {
}
public DbSet<Server> Server { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<Server>().ToTable("Server");
builder.Entity<User.User>().HasMany(x => x.Servers).WithOne(x => x.User);
}
服务器:
public class Server
{
public string ServerId { get; set; }
[Required]
[InverseProperty("User")]
public string UserId { get; set; }
public virtual User.User User { get; set; }
}
用户上下文:
public class UserContext : IdentityDbContext<User>
{
public UserContext(DbContextOptions<UserContext> options)
: base(options)
{
}
public DbSet<User> User { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<User>().ToTable("User");
}
}
用户:
public class User : IdentityUser
{
public virtual ICollection<Server.Server> Servers { get; set; }
}
在启动时,我将所有 Server 数据提取到缓存中并每分钟更新一次。
错误发生在模型中。在我使用服务器数据的模型上。 之后,我正在检查服务器数据是否包含非空用户数据。 是否为空,我是从数据库中加载(这一步抛出错误)。
public async Task OnGetAsync()
{
Servers = await this.ServerManager.GetServersAsync();
foreach (var server in Servers)
{
if(server == null)
continue;
// This code triggers the error
var user = await UserManager.FindByIdAsync(server.UserId);
if(user == null)
continue;
server.User = user;
}
}
用户:
public class User : IdentityUser {
public virtual ICollection<IdentityRole> Roles { get; set; }
public virtual ICollection<Server.Server> Servers { get; set; }
}
6 次查询一个用户数据: https://pastebin.com/ud9eeKKe
每分钟我都会保存数据,但我收到以下错误:
DbUpdateException:更新条目时出错。 有关详细信息,请参阅内部异常。 MySql.Data.MySqlClient.MySqlException: 键“PRIMARY”的重复条目“2f2469d5-b35e-42d8-a90c-a6cc3b899b5a”MySql.Data.MySqlClient.MySqlException:键“PRIMARY”的重复条目“2f2469d5-b35e-42d8-a90c-a6cc3b899b5a”。
【问题讨论】:
-
能不能改一下ServerManager.GetServersAsync()的代码?
-
是的,我可以做到。这是自定义管理器。
-
然后您可以将用户包含在服务器中并删除导致错误的代码。
-
但我不想从数据库中获取所有数据。性能原因。
-
所有数据是什么?与其他用户不同的身份用户?
标签: asp.net asp.net-core .net-core entity-framework-core