欢迎光临

木子屋

标题: 实体数据模型(EDM)加入导航属性序列化失败解决方法

作者: dnawo

日期: 2012-08-29 04:49 PM

分类: Win编程

内容: 在实体数据模型(EDM)加入导航属性后，序列化失败：
复制内容到剪贴板 程序代码NorthwindContext context = new NorthwindContext();
var data = context.Categories.ToList();
//序列化
DataContractJsonSerializer serializer = new DataContractJsonSerializer(data.GetType());
using (MemoryStream stream = new MemoryStream())
{
serializer.WriteObject(stream, data);
Console.WriteLine(Encoding.UTF8.GetString(stream.ToArray()));
}
错误提示：
引用内容不应为数据协定名称为“Category_EAAF529CDBD7F8D69F7CB877AF1BEE8D6351196C91B61FD2AB9F27727FFA8FEB:http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies”的类型“System.Data.Entity.DynamicProxies.Category_EAAF529CDBD7F8D69F7CB877AF1BEE8D6351196C91B61FD2AB9F27727FFA8FEB”。请考虑使用 DataContractResolver，或将任何未知类型以静态方式添加到已知类型的列表。例如，可以使用 KnownTypeAttribute 特性，或者将未知类型添加到传递给 DataContractSerializer 的已知类型列表。
实体数据模型(EDM)加入导航属性序列化失败解决方法
将上下文对象实例Configuration.ProxyCreationEnabled属性值设置为false即可：
复制内容到剪贴板 程序代码using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using ConsoleApplication1.Models.Mapping;
namespace ConsoleApplication1.Models
{
public class NorthwindContext : DbContext
{
static NorthwindContext()
{
Database.SetInitializer<NorthwindContext>(null);
}
public NorthwindContext()
: base("Name=NorthwindContext")
{
this.Configuration.ProxyCreationEnabled = false;
}
public DbSet<Category> Categories { get; set; }
public DbSet<Product> Products { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new CategoryMap());
modelBuilder.Configurations.Add(new ProductMap());
}
}
}
补充说明
[1].设置Configuration.ProxyCreationEnabled = true后，将禁用导航属性，这表示不能通过导航属性访问关联数据。

+ 查看当前日志评论 (0)

登录

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.676 ms

返回

标题: 实体数据模型(EDM)加入导航属性序列化失败解决方法

你没有权限发表评论

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.676 ms

返回

暂无评论

返回

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.707 ms

返回