0

EF5 エンティティ モデルを公開する WCF データ サービスがあります。この特定のモデルには、2 つの自己参照列があります。以下がモデルです。

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

サンプル アプリでこのデータ サービスに接続しようとすると、次のメッセージが表示されます。

Dependent Role Chunk_Left_Source によって参照されるプロパティは、Relationship MyNamespace.Chunk_Left の参照制約で Dependent Role によって参照される EntityType MyNamespace.Chunk のキーのサブセットである必要があります。

Chunk.Right についても同じメッセージが繰り返されます。これは EF5 でのみ発生します。EF 4.3.1 にダウングレードすると、機能します。VS 2012 と .NET 4.5 を使用しています。誰かがこれで私を助けることができれば、私は本当に感謝しています.

4

1 に答える 1

0

したがって、これに対する答えは、.NET 4.5 に付属する System.Data.Services ライブラリの代わりに、アップグレードされた Microsoft.Data.Services ライブラリを使用することだったようです。これが、これに出くわす可能性のある他の人に役立つことを願っています。

于 2013-02-13T18:08:37.033 に答える