我正在尝试使HttpPut请求正常工作,但是下面的行引发异常,因为本地StockItem尚未分离。
_context.Entry(StockItem).State = EntityState.Modified;
因此,我需要在修改它之前分离本地StockItem。 StockItem实体看起来像这样:
public class StockItem
{
public int Id { get; set; }
public int ProductId { get; set; }
public Product Product { get; set; }
public int StockId { get; set; }
public DateTime BestBy { get; set; }
public double Amount { get; set; }
}
我想创建一个扩展以在其他HttpPut请求中重用它。我发现此代码段几乎可以正常工作:
public static class Detacher
{
public static void DetachLocal<T>(this WebAppDbContext context, int entryId)
where T : class, IIdentifier
{
//find local entity by Id
var local = context.Set<T>()
.Local
.FirstOrDefault(entry => entry.Id.Equals(entryId));
if (!(local==null))
{
//detach it
context.Entry(local).State = Microsoft.EntityFrameworkCore.EntityState.Detached;
}
}
}
public interface IIdentifier
{
int Id { get; set; }
}
但是如果我将StockItem类型传递给此扩展名,则会出现错误
_context.DetachLocal<StockItem>(id);
CS0311类型'WebApi.Entities.StockItem'不能用作 通用类型或方法中的类型参数“ T” 'Detacher.DetachLocal(WebAppDbContext,int)'。没有隐含 从“ WebApi.Entities.StockItem”到 “ WebApi.IIdentifier”。
答案 0 :(得分:0)
看看界面
public interface IIdentifier
{
int Id { get; set; }
现在您的实体
public class StockItem
它实现接口吗?不。
可能吗?是。它具有所有必需的成员(Id
)。
替换
public class StockItem
使用
public class StockItem : IIdentifier
然后。