调用 DeleteAsync 时获取模糊匹配发现异常
Getting Ambiguous match found exception while calling DeleteAsync
我有一个 table,它使用代码作为主键而不是 Id,当我调用 DeleteAsync
方法时,我得到异常 Ambiguous match found
.
[Table("Test")]
public class Test: FullAuditedEntity<int>
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
new public int Id { get; set; }
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public virtual int Code { get; set; }
_testRepository.DeleteAsync(code);
堆栈跟踪:
at System.RuntimeType.GetPropertyImpl(String name, BindingFlags
bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers)
at System.Type.GetProperty(String name, BindingFlags bindingAttr)
at System.Reflection.TypeExtensions.GetProperty(Type type, String name, BindingFlags bindingAttr)
at System.Linq.Expressions.Expression.PropertyOrField(Expression expression, String propertyOrFieldName)
at Abp.Domain.Repositories.AbpRepositoryBase`2.CreateEqualityExpressionForId(TPrimaryKey id) in D:\Github\aspnetboilerplate\src\Abp\Domain\Repositories\AbpRepositoryBase.cs:line 310
at Abp.Domain.Repositories.AbpRepositoryBase`2.FirstOrDefault(TPrimaryKey id) in D:\Github\aspnetboilerplate\src\Abp\Domain\Repositories\AbpRepositoryBase.cs:line 108
at Abp.EntityFrameworkCore.Repositories.EfCoreRepositoryBase`3.Delete(TPrimaryKey id) in D:\Github\aspnetboilerplate\src\Abp.EntityFrameworkCore\EntityFrameworkCore\Repositories\EfCoreRepositoryBaseOfTEntityAndTPrimaryKey.cs:line 216
at Abp.Domain.Repositories.AbpRepositoryBase`2.DeleteAsync(TPrimaryKey id) in D:\Github\aspnetboilerplate\src\Abp\Domain\Repositories\AbpRepositoryBase.cs:line 206
at Castle.Proxies.Invocations.IRepository`2_DeleteAsync_58.InvokeMethodOnTarget()
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at Abp.Domain.Uow.UnitOfWorkInterceptor.PerformAsyncUow(IInvocation invocation, UnitOfWorkOptions options) in D:\Github\aspnetboilerplate\src\Abp\Domain\Uow\UnitOfWorkInterceptor.cs:line 83
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at Castle.Proxies.IRepository`2Proxy_16.DeleteAsync(Int32 id)
at Nec.Stanchion.Business.Services.Suppliers.SupplierAppService.<DeleteSupplier>d__3.MoveNext() in C:\Users\viveknuna\source\repos\Stanchion\aspnet-core\src\Nec.Stanchion.Business.Services\Suppliers\SupplierAppService.cs:line 53
Ambiguous match found
可能是由于 属性 在 Entity Framework 中隐藏了 Id
。 FullAuditedEntity<int>
已经定义 Id
与您所做的相同,因此您可以删除它。
另一方面,_testRepository.DeleteAsync(code)
通过比较Id
删除。要按 code
删除,请执行 _testRepository.DeleteAsync(test => test.Code == code);
我有一个 table,它使用代码作为主键而不是 Id,当我调用 DeleteAsync
方法时,我得到异常 Ambiguous match found
.
[Table("Test")]
public class Test: FullAuditedEntity<int>
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
new public int Id { get; set; }
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public virtual int Code { get; set; }
_testRepository.DeleteAsync(code);
堆栈跟踪:
at System.RuntimeType.GetPropertyImpl(String name, BindingFlags
bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers)
at System.Type.GetProperty(String name, BindingFlags bindingAttr)
at System.Reflection.TypeExtensions.GetProperty(Type type, String name, BindingFlags bindingAttr)
at System.Linq.Expressions.Expression.PropertyOrField(Expression expression, String propertyOrFieldName)
at Abp.Domain.Repositories.AbpRepositoryBase`2.CreateEqualityExpressionForId(TPrimaryKey id) in D:\Github\aspnetboilerplate\src\Abp\Domain\Repositories\AbpRepositoryBase.cs:line 310
at Abp.Domain.Repositories.AbpRepositoryBase`2.FirstOrDefault(TPrimaryKey id) in D:\Github\aspnetboilerplate\src\Abp\Domain\Repositories\AbpRepositoryBase.cs:line 108
at Abp.EntityFrameworkCore.Repositories.EfCoreRepositoryBase`3.Delete(TPrimaryKey id) in D:\Github\aspnetboilerplate\src\Abp.EntityFrameworkCore\EntityFrameworkCore\Repositories\EfCoreRepositoryBaseOfTEntityAndTPrimaryKey.cs:line 216
at Abp.Domain.Repositories.AbpRepositoryBase`2.DeleteAsync(TPrimaryKey id) in D:\Github\aspnetboilerplate\src\Abp\Domain\Repositories\AbpRepositoryBase.cs:line 206
at Castle.Proxies.Invocations.IRepository`2_DeleteAsync_58.InvokeMethodOnTarget()
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at Abp.Domain.Uow.UnitOfWorkInterceptor.PerformAsyncUow(IInvocation invocation, UnitOfWorkOptions options) in D:\Github\aspnetboilerplate\src\Abp\Domain\Uow\UnitOfWorkInterceptor.cs:line 83
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at Castle.Proxies.IRepository`2Proxy_16.DeleteAsync(Int32 id)
at Nec.Stanchion.Business.Services.Suppliers.SupplierAppService.<DeleteSupplier>d__3.MoveNext() in C:\Users\viveknuna\source\repos\Stanchion\aspnet-core\src\Nec.Stanchion.Business.Services\Suppliers\SupplierAppService.cs:line 53
Ambiguous match found
可能是由于 属性 在 Entity Framework 中隐藏了 Id
。 FullAuditedEntity<int>
已经定义 Id
与您所做的相同,因此您可以删除它。
另一方面,_testRepository.DeleteAsync(code)
通过比较Id
删除。要按 code
删除,请执行 _testRepository.DeleteAsync(test => test.Code == code);