我有一个公开我的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。如果有人能帮助我,我真的很感激。
答案 0 :(得分:0)
所以看起来这个问题的答案是使用升级的Microsoft.Data.Services库而不是.NET 4.5附带的System.Data.Services库。我希望这可以帮助其他任何人偶然发现这一点。