我正在使用新的MVC 4 Beta中的WebAPI。尝试获取具有virtual ICollection<>
属性的实体时,我遇到了此错误。有没有办法解决这个问题呢?我知道这是在Beta阶段,所以这可能会在未来发生。如果有一个解决方案,那只是一种好奇心。
答案 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; }
}
所以我刚刚用相机创建了一个工厂来完成我需要的工作。希望这能帮助找到这个答案的人。