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 を使用しています。誰かがこれで私を助けることができれば、私は本当に感謝しています.