Mic*_*cky 5 wcf entity-framework infinite-loop code-first
我有一个像这样的模特
public class User
{
[Key]
public long UserId { get; set; }
[Required]
public String Nickname { get; set; }
public virtual ICollection<Group> Memberships { get; set; }
}
public class Group
{
[Key]
public long GroupId { get; set; }
[Required]
public String Name { get; set; }
public virtual ICollection<User> Members { get; set; }
}
public class DataContext : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<Group> Groups { get; set; }
public DataContext()
{
Configuration.LazyLoadingEnabled = true;
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.HasMany(u => u.Memberships)
.WithMany(t => t.Members)
.Map(x =>
{
x.MapLeftKey("UserId");
x.MapRightKey("GroupId");
x.ToTable("GroupMembers");
});
}
}
Run Code Online (Sandbox Code Playgroud)
使用测试控制台应用程序访问实体时一切正常,但我需要通过WCF服务,这里我得到了这个例外:
无法调用该服务.可能的原因:服务离线或无法访问; 客户端配置与代理不匹配; 现有代理无效.有关更多详细信息,请参阅堆栈跟踪.您可以尝试通过启动新代理,还原到默认配置或刷新服务来进行恢复
我发现这个工作的唯一方法是删除其中一个实体中的导航器,因为两侧的导航器都会导致无限循环.
有没有办法让这个工作没有删除导航器?
如果您尝试使用WCF,则有两个问题:
DataContractSerializer
.要删除循环引用,您可以使用IgnoreDataMember
属性标记其中一个导航属性,或者您可以通过标记具有DataContract(IsReference = true)
属性的所有实体和应该使用DataMember
属性序列化的所有成员属性来告诉序列化器有关循环引用的信息. 归档时间: |
|
查看次数: |
2511 次 |
最近记录: |