没有EF的MVC SPA:在用本地名称'__type'写入属性后,你必须写一个属性'type'='object'

时间:2012-04-14 18:51:45

标签: asp.net-mvc-4 singlepage

所以我有一个非常规范化的模型,我正在尝试在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中爬了几个小时,但我甚至都不清楚它在哪里失败了。任何意见都将不胜感激。

1 个答案:

答案 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+