使用来自数据服务的Entity Framework 5(EF5)的自引用实体时出错

时间:2013-02-13 05:54:31

标签: entity-framework wcf-data-services entity-framework-5 entity-framework-4.3

我有一个公开我的EF5实体模型的WCF数据服务。此特定模型具有两个自引用列。以下是模型。

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; }
}

我还使用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);

然后就是这个公开数据模型的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;
    }
}

当我尝试在示例应用中连接到此数据服务时,收到以下消息:

  

从属角色Chunk_Left_Source引用的属性必须是a   EntityType MyNamespace.Chunk引用的键的子集   关系参照约束中的依赖角色   MyNamespace.Chunk_Left。

我为Chunk.Right重复了同样的消息。这只发生在EF5中。当我降级到EF 4.3.1时,它可以工作。我正在使用VS 2012和.NET 4.5。如果有人能帮助我,我真的很感激。

1 个答案:

答案 0 :(得分:0)

所以看起来这个问题的答案是使用升级的Microsoft.Data.Services库而不是.NET 4.5附带的System.Data.Services库。我希望这可以帮助其他任何人偶然发现这一点。