在.NET 7中使用ExecuteDelete和ExecuteUpdate的问题

2skhul33  于 2023-08-08  发布在  .NET
关注(0)|答案(2)|浏览(175)

我遇到过在抽象泛型类中使用ExecuteDelete的问题。谁能解释一下在什么情况下不能使用ExecuteDelete和ExecuteUpdate?Tagret框架设置为.NET 7
下面是我的代码:

using Microsoft.EntityFrameworkCore;

namespace ProjectX.Common.Repositories;

public abstract class BaseRepository<T, V> : IRepository<T, V>
where T : Entity
where V : struct
{
protected readonly DbContext _context;

public BaseRepository(DbContext context)
{
    _context = context;
}

public virtual async Task<bool> DeleteAsync(T entity, CancellationToken cancellationToken = default)
{
    var deleted = await _context.Set<T>()
                 .Where(t => t.Id.Equals(entity.Id))
                 .ExecuteDeleteAsync(); // Here is the problem. This method cannot be found. Target Framework is .Net 7 and EF Core version is 7.0.7

    return deleted > 0;
}
}

字符串

EF核心版本:7.0.7数据库提供者:Microsoft.EntityFrameworkCore.SqlServer目标框架:NET 7.0 IDE:Visual Studio 2022最新版本

7gcisfzg

7gcisfzg1#

缺少对Microsoft.EntityFrameworkCore.Relational的包引用

vmpqdwk3

vmpqdwk32#

请参阅:https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-7.0/whatsnew#inheritance-and-multiple-tables
“向查询添加过滤器通常意味着TPC和TPT策略的操作都将失败。这也是因为可能需要从多个表中删除行。例如,此查询:

await context.Posts.Where(p => p.Author!.Name.StartsWith("Arthur")).ExecuteDeleteAsync();

字符串
使用TPC或TPT时失败。”
Issue #10879跟踪添加对在这些场景中自动发送多个命令的支持。如果你希望看到这个问题得到实施,请为它投票。
t;dr

  • ExecuteUpdate/Delete只能作用于单个表,在使用TPC/TPTMap策略时,通用实体可能与其他表有关系。*

相关问题