MVC 4 Beta - 你必须写一个属性' type' =' object'用本地名称' __ type'写完属性后

时间:2012-03-12 22:56:36

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

我正在使用新的MVC 4 Beta中的WebAPI。尝试获取具有virtual ICollection<>属性的实体时,我遇到了此错误。有没有办法解决这个问题呢?我知道这是在Beta阶段,所以这可能会在未来发生。如果有一个解决方案,那只是一种好奇心。

4 个答案:

答案 0 :(得分:2)

我通过删除virtual关键字并确保在我的存储库中的Include语句中提供了具有virtual关键字的对象和集合来实现此目的。

public class Order
{
    public int ID { get; set; }
    public DateTime OrderDate { get; set; }
    public ICollection<Product> Products { get; set; }
}

public interface IOrderRepository
{
    IQueryable<Order> Orders { get; }
    void SaveOrder(Order order);
    void DeleteOrder(Order order);
}

public class OrderRepository
{
    StoreDbContext db = new StoreDbContext();

    public IQueryable<Order> Orders
    {
        get { return db.Orders.Include("Products"); }
    }

    public void SaveOrder(Order order)
    {
        db.Entry(order).State = order.ID == 0 ? 
                EntityState.Added : 
                EntityState.Modified;

        db.SaveChanges();
    }

    public void DeleteOrder(Order order)
    {
        db.Orders.Remove(order);

        db.SaveChanges();
    }
}

答案 1 :(得分:1)

我遇到了同样的问题,它似乎是默认WebApi序列化程序的一个问题。 我在我的Global.asax.cs中添加了Json.Net作为格式化程序,它对我来说很好。 我只是按照这个例子: http://blogs.msdn.com/b/henrikn/archive/2012/02/18/using-json-net-with-asp-net-web-api.aspx

这就是我在Global.asax.cs

中的内容
JsonSerializerSettings serializerSettings = new JsonSerializerSettings();
serializerSettings.Converters.Add(new IsoDateTimeConverter());
GlobalConfiguration.Configuration.Formatters[0] = new JsonNetFormatter(serializerSettings);

我刚刚使用NuGet添加了Json.Net包,并创建了JsonNetFormatter类,如上文所述。

答案 2 :(得分:0)

我有类似的问题。我通过使用一种只有简单类型的ViewModel类来修复它。我将DbContext返回的对象转换为我的ViewModel类,并将其传递回客户端。

这不适用于所有情况,但它确实在我的情况下。

答案 3 :(得分:0)

也遇到了这个问题。我的情况虽然有点不同。

我有这种结构,对我不起作用。

[DataContract]
public class MJPEGCamera : Camera
{
}
[DataContract]
public class H264Camera : Camera
{     
}
[DataContract]
public class Camera
{
    [DataMember]
    public string cameraName { get; set; }
    [DataMember]
    public string address { get; set; }
    [DataMember]
    public string format { get; set; }
    [DataMember]
    public string archiveDaysUrl { get; private set; }
    [DataMember]
    public string archiveHoursUrl { get; private set; }
}

所以我刚刚用相机创建了一个工厂来完成我需要的工作。希望这能帮助找到这个答案的人。