Entity framework 使用数据服务中的实体框架5(EF5)使用自引用实体时出错
我有一个WCF数据服务,它公开了我的EF5实体模型。此特定模型有两个自引用列。下面是模型Entity framework 使用数据服务中的实体框架5(EF5)使用自引用实体时出错,entity-framework,wcf-data-services,entity-framework-5,entity-framework-4.3,Entity Framework,Wcf Data Services,Entity Framework 5,Entity Framework 4.3,我有一个WCF数据服务,它公开了我的EF5实体模型。此特定模型有两个自引用列。下面是模型 public class Chunk { [Key] public int Id { get; set; } [Required] public string Name { get; set; } /// <summary> /// Gets/sets the left chunk, which is used for chaining
public class Chunk
{
[Key]
public int Id { get; set; }
[Required]
public string Name { get; set; }
/// <summary>
/// Gets/sets the left chunk, which is used for chaining
/// </summary>
public int? LeftChunk_Id { get; set; }
/// <summary>
/// Gets/sets the right chunk, which is used for chaining
/// </summary>
public int? RightChunk_Id { get; set; }
/// <summary>
/// Gets/set any chunk that should be rendered to the left of this chunk
/// </summary>
[ForeignKey("LeftChunk_Id")]
public virtual Chunk Left { get; set; }
/// <summary>
/// Gets/sets any chunk that should be rendered to the right of this chunk
/// </summary>
[ForeignKey("RightChunk_Id")]
public virtual Chunk Right { get; set; }
}
公共类块
{
[关键]
公共int Id{get;set;}
[必需]
公共字符串名称{get;set;}
///
///获取/设置用于链接的左侧块
///
public int?LeftChunk_Id{get;set;}
///
///获取/设置用于链接的正确块
///
public int?RightChunk_Id{get;set;}
///
///获取/设置应呈现到此块左侧的任何块
///
[ForeignKey(“LeftChunk_Id”)]
左公共虚拟块{get;set;}
///
///获取/设置应呈现到此块右侧的任何块
///
[ForeignKey(“RightChunk_Id”)]
公共虚拟块权限{get;set;}
}
我还使用Fluent建立了关系
modelBuilder.Entity<Chunk>()
.HasOptional<Chunk>(o => o.Left)
.WithMany()
.HasForeignKey(o => o.LeftChunk_Id)
.WillCascadeOnDelete(false);
modelBuilder.Entity<Chunk>()
.HasOptional<Chunk>(o => o.Right)
.WithMany()
.HasForeignKey(o => o.RightChunk_Id)
.WillCascadeOnDelete(false);
modelBuilder.Entity()
.has可选(o=>o.Left)
.有很多
.HasForeignKey(o=>o.LeftChunk\u Id)
.WillCascadeOnDelete(假);
modelBuilder.Entity()
.has可选(o=>o.Right)
.有很多
.HasForeignKey(o=>o.RightChunk\U Id)
.WillCascadeOnDelete(假);
然后,这个WCF数据服务公开了数据模型
public class ContentStudio : DataService<ObjectContext>
{
public static void InitializeService(DataServiceConfiguration config)
{
config.SetEntitySetAccessRule("Chunks", EntitySetRights.AllRead);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
}
protected override ObjectContext CreateDataSource()
{
ContentStudioDataContext ctx = new ContentStudioDataContext();
var objectContext = ((IObjectContextAdapter)ctx).ObjectContext;
objectContext.ContextOptions.ProxyCreationEnabled = false;
return objectContext;
}
}
公共类ContentStudio:DataService
{
公共静态void InitializeService(DataServiceConfiguration配置)
{
config.SetEntitySetAccessRule(“Chunks”,EntitySetRights.AllRead);
config.DataServiceBehavior.MaxProtocolVersion=DataServiceProtocolVersion.V2;
}
受保护的重写ObjectContext CreateDataSource()
{
ContentStudioDataContext ctx=新ContentStudioDataContext();
var objectContext=((IObjectContextAdapter)ctx).objectContext;
objectContext.ContextOptions.ProxyCreationEnabled=false;
返回objectContext;
}
}
在示例应用中尝试连接到此数据服务时,我收到以下消息:
从属角色Chunk\u Left\u源引用的属性必须是
引用的EntityType MyNamespace.Chunk的键的子集
关系的引用约束中的依赖角色
MyNamespace.Chunk_左
我在Chunk身上重复了同样的信息。对。这只发生在EF5中。当我降级到EF 4.3.1时,它起作用了。我正在使用VS2012和.NET4.5。如果有人能在这方面帮助我,我将非常感谢。因此,这一问题的答案似乎是使用升级的Microsoft.Data.Services库,而不是.NET 4.5附带的System.Data.Services库。我希望这有助于其他可能偶然发现这一点的人