所以我有一个非常规范化的模型,我正在尝试在MVC4中创建一个想要使用实体框架对象的单页面应用程序。我的问题是我无法在EF中创建一个具有我需要的复杂映射的实体(我已经检查了多个指南,但我似乎无法从包含不同主键的多个表中创建一个实体。我找到了一个使用可更新视图的解决方案,但这实际上只是将抽象推送到数据库层。)
所以我想我可以使用EF查询创建一个POCO对象来创建对象,然后在插入/更新/删除时,我可以只获取POCO数据并更新底层的3个表。
好吧,我试图调整现有的工作控制器试图了解正在发生的事情,但我遇到了障碍。
让我们假设我有一个工作的SPA控制器,如下所示:
public partial class FooController : DbDataController<aspnetEntities>
{
public IQueryable<Foos> GetFoos() { ... }
}
我只是稍微改变它以返回我的新POCO数据对象Bar,让我们想象的目前与Foo具有完全相同的字段:
public partial class FooController : DbDataController<aspnetEntities>
{
public IQueryable<Bars> GetBars() { ... }
}
在FooViewModel.js中我将操作名称更新为GetBars,并将类型更新为
var entityType = "Foo:#Models";
到
var entityType = "Bar:#Models";
我直接点击了我的操作,我得到了:
OLD
<ArrayOfFoo><Foo><Property>true</Property></Foo></ArrayOfFoo>
NEW
<ArrayOfBar><Bar><Property>true</Property></Bar></ArrayOfBar>
所以控制器看起来像是在给我我期望的东西,但是当我试图把整个东西放在一起时,SPA会闪现:
在使用本地名称“__type”编写属性后,您必须编写属性“type”=“object”。
我猜不出我需要将类型数据输入KO?我不知道那可能会在哪里,我已经在JS中爬了几个小时,但我甚至都不清楚它在哪里失败了。任何意见都将不胜感激。
答案 0 :(得分:1)
您遇到的问题与使用POCO而非标准EF的事实有关。它应该与webapi序列化程序有关,它不知道该类是否可以序列化。无论如何,这是一个将在RC中删除的错误。看看这个线程的变通方法: http://forums.asp.net/t/1773173.aspx/1?You+must+write+an+attribute+type+object+after+writing+the+attribute+with+local+name+__type+