C# 继承的类不是实体框架模型的一部分
情况: 我有一个带有SQL Server后端的ASP.NET MVC webapp,它使用实体框架进行管理 我有一个c类,实体框架使用它来更新数据库duh中的实体。然而,为了让用户真正更新该模型,我将其放在使用Knockout的管理页面上 当Knockout处理删除时,它向Javascript对象添加一个_destroy属性,并对特定ASP.NET MVC控制器中的更新方法进行AJAX调用。为了检索这个_destroy属性,我有了第二个C类,它简单地继承了第一个C类,并将_destroy添加为可为空的bool属性 问题: 当我试图将此inhered对象传递回Entity Framework以更新或删除该实体时,它会引发一个异常: 实体类型Foo不是当前上下文模型的一部分 Entity Framework不知道这个继承的类,也不应该知道,它只在web应用程序中有意义,但它不会仅使用基类的属性来执行更新 问题: 我是否需要重新设计如何将此继承对象传递给EF?是否可以保存此更新的实体 除了用添加的_destroynullable bool复制我的基类并强制转换它之外,还有其他选择吗?代码气味 例如: 酒吧C# 继承的类不是实体框架模型的一部分,c#,asp.net-mvc,entity-framework,knockout.js,C#,Asp.net Mvc,Entity Framework,Knockout.js,情况: 我有一个带有SQL Server后端的ASP.NET MVC webapp,它使用实体框架进行管理 我有一个c类,实体框架使用它来更新数据库duh中的实体。然而,为了让用户真正更新该模型,我将其放在使用Knockout的管理页面上 当Knockout处理删除时,它向Javascript对象添加一个_destroy属性,并对特定ASP.NET MVC控制器中的更新方法进行AJAX调用。为了检索这个_destroy属性,我有了第二个C类,它简单地继承了第一个C类,并将_destroy添加为可
public class Bar
{
public int Id { get; set; }
public string SomeOtherProperty { get; set; }
}
foo.cs
public class Foo : Bar
{
public bool? _destroy { get; set; }
}
MyController.cs
public async Task<JsonResult> Update(CancellationToken token, params Foo[] foos)
{
var deletefoos = foos.Where(x => x._destroy.HasValue && x._destroy.Value).Select((Bar b) => b).ToArray();
await _myEntityFrameworkAbstraction.DeleteAllTheseFoosAsync(token, deletefoos);
//similar update call
}
MyEntityFrameworkStrAction.cs
...
_context.Entry(updatebars).CurrentValues.SetValues(updatebars);
await _context.SaveChangesAsync(token);
...
_context.Set<Bar>().RemoveRange(deletebars);
await _context.SaveChangesAsync(token);
...
就我个人而言,我会让你的实体完全远离web应用程序,而使用视图模型。使用包含而不是继承如何。使用你拥有的代码或foos有什么问题吗?Where.Cast?@IvanStoev这可能有效,我会尝试一下。。。不知道为什么我以前没想到。公共条实体{get;set;}这看起来很容易,但会造成伤害。DavidG的建议伤害较小,但如果你有更大、更复杂的模型,效果会更好。就我个人而言,我会让你的实体完全远离web应用程序,而使用视图模型。使用包含而不是继承如何。使用你拥有的代码或foos.Where.Cast?@IvanStoev那可能行得通,我来试试。。。不知道为什么我以前没想到。公共酒吧BarEntity{get;set;}看起来很容易受伤。戴维格的建议伤害较小,但如果你有更大更复杂的模型,效果会更好。