继承的类不是实体框架模型

时间:2016-12-22 17:33:29

标签: c# asp.net-mvc entity-framework knockout.js

场合

我有一个带有SQL Server后端的ASP.NET MVC webapp,它使用Entity Framework进行管理。

我有一个c#类,Entity Framework用它来更新数据库中的实体(duh)。但是,为了让用户实际更新该模型,我将其放在使用Knockout的管理页面上。

当Knockout处理删除时,它会向Javascript对象添加_destroy属性,并对特定ASP.NET MVC控制器中的Update方法进行AJAX调用。要检索此_destroy属性,我有第二个C#类,它只是继承第一个,并添加_destroy作为可以为空的bool属性。

问题

当我尝试将此加密对象传递回Entity Framework以更新(或删除)实体时,它会引发异常:

  

实体类型Foo不是当前上下文的模型的一部分

实体框架并不知道这个继承的类(并且它不应该只在web-app中有意义),但它不会只使用基类'用于执行更新的属性

问题

我是否需要重新设计如何将此继承对象传递给EF?是否可以保存此更新的实体?

除了复制我的基类以及添加的_destroy可空的bool并投射它之外,还有其他选择吗? (代码味)

示例

bar.cs

 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
}

myentityframeworkabstraction.cs

...
_context.Entry(updatebars).CurrentValues.SetValues(updatebars);
await _context.SaveChangesAsync(token);
...
_context.Set<Bar>().RemoveRange(deletebars);
await _context.SaveChangesAsync(token);
...

0 个答案:

没有答案