0

我有一个公开我的 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 引用的属性必须是关系 MyNamespace.Chunk_Left 的引用约束中的从属角色所引用的 EntityType MyNamespace.Chunk 的键的子集。

对于 Chunk.Right,我收到了相同的消息。这只发生在 EF5 中。当我降级到 EF 4.3.1 时,它可以工作。我正在使用 VS 2012 和 .NET 4.5。如果有人可以帮助我解决这个问题,我将不胜感激。

4

1 回答 1

0

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

于 2013-02-13T18:08:37.033 回答