Entity framework core EF Core在断开连接的环境中删除实体
我有真正的困难与EF核心与一个网络API项目,我正在工作。。。对我来说,EF核心一点也不直观。我处于一个断开连接的环境中,我正在尝试更新数独游戏。EF Core删除用户与其应用程序和角色之间的连接的时间比更新游戏的时间要多。如何在更新中禁用delete语句?没有理由删除,我不需要它们。我如何阻止他们 方法如下,游戏以图形的形式加载,我的理解是,这段代码应该将所有跟踪的内容更改为修改或添加。对我来说,EF Core似乎正在不遗余力地删除一些东西。。。这毫无意义。我从未指示它删除任何内容:Entity framework core EF Core在断开连接的环境中删除实体,entity-framework-core,Entity Framework Core,我有真正的困难与EF核心与一个网络API项目,我正在工作。。。对我来说,EF核心一点也不直观。我处于一个断开连接的环境中,我正在尝试更新数独游戏。EF Core删除用户与其应用程序和角色之间的连接的时间比更新游戏的时间要多。如何在更新中禁用delete语句?没有理由删除,我不需要它们。我如何阻止他们 方法如下,游戏以图形的形式加载,我的理解是,这段代码应该将所有跟踪的内容更改为修改或添加。对我来说,EF Core似乎正在不遗余力地删除一些东西。。。这毫无意义。我从未指示它删除任何内容:
async public Task<IRepositoryResponse> Update(TEntity entity)
{
var result = new RepositoryResponse();
try
{
dbSet.Update(entity);
context.ChangeTracker.TrackGraph(entity,
e => {
var dbEntry = (IEntityBase)e.Entry.Entity;
if (dbEntry.Id != 0)
{
e.Entry.State = EntityState.Modified;
}
else
{
e.Entry.State = EntityState.Added;
}
});
await context.SaveChangesAsync();
result.Success = true;
result.Object = entity;
return result;
}
catch (Exception exp)
{
result.Success = false;
result.Exception = exp;
return result;
}
}
异步公共任务更新(TEntity实体)
{
var result=new RepositoryResponse();
尝试
{
数据库集更新(实体);
context.ChangeTracker.TrackGraph(实体,
e=>{
var dbEntry=(IEntityBase)e.Entry.Entity;
如果(dbEntry.Id!=0)
{
e、 Entry.State=EntityState.Modified;
}
其他的
{
e、 Entry.State=EntityState.Added;
}
});
wait context.saveChangesSync();
结果:成功=正确;
结果:对象=实体;
返回结果;
}
捕获(异常扩展)
{
结果:成功=错误;
result.Exception=exp;
返回结果;
}
}
嗯,我找到了一个解决办法,但这相当于用泡泡糖和胶带固定你的自行车。很难看。。。但它是有效的。在保存游戏之前,我创建了一个所有相关应用程序和角色的列表,然后在wait context.SaveChangesAsync()之后重新创建并重新保存这些值。代码如下所示:
async public Task<IRepositoryResponse> Update(TEntity entity)
{
var result = new RepositoryResponse();
try
{
entity.DateUpdated = DateTime.UtcNow;
context.Games.Update(entity);
context.ChangeTracker.TrackGraph(entity,
e => {
var dbEntry = (IEntityBase)e.Entry.Entity;
if (dbEntry.Id != 0)
{
e.Entry.State = EntityState.Modified;
}
else
{
e.Entry.State = EntityState.Added;
}
});
var apps = new List<App>();
var roles = new List<Role>();
foreach (var userApp in entity.User.Apps)
{
apps.Add(userApp.App);
}
foreach (var userRole in entity.User.Roles)
{
roles.Add(userRole.Role);
}
await context.SaveChangesAsync();
foreach (var app in apps)
{
userAppDbSet.Add(new UserApp(entity.UserId, app.Id));
}
foreach (var role in roles)
{
userRoleDbSet.Add(new UserRole(entity.UserId, role.Id));
}
await context.SaveChangesAsync();
result.Success = true;
result.Object = entity;
return result;
}
catch (Exception exp)
{
result.Success = false;
result.Exception = exp;
return result;
}
}
异步公共任务更新(TEntity实体)
{
var result=new RepositoryResponse();
尝试
{
entity.DateUpdated=DateTime.UtcNow;
context.Games.Update(实体);
context.ChangeTracker.TrackGraph(实体,
e=>{
var dbEntry=(IEntityBase)e.Entry.Entity;
如果(dbEntry.Id!=0)
{
e、 Entry.State=EntityState.Modified;
}
其他的
{
e、 Entry.State=EntityState.Added;
}
});
var apps=新列表