我有一个公开我的 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。如果有人可以帮助我解决这个问题,我将不胜感激。