Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 使用数据服务中的实体框架5(EF5)使用自引用实体时出错_Entity Framework_Wcf Data Services_Entity Framework 5_Entity Framework 4.3 - Fatal编程技术网

Entity framework 使用数据服务中的实体框架5(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

我有一个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
    /// </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库。我希望这有助于其他可能偶然发现这一点的人