Wcf Can';无法将关联对象正确添加到实体框架上下文中
我通过数据服务公开了实体和框架项目:Wcf Can';无法将关联对象正确添加到实体框架上下文中,wcf,entity-framework,wcf-data-services,odata,Wcf,Entity Framework,Wcf Data Services,Odata,我通过数据服务公开了实体和框架项目: public class VersionContext : DbContext { public DbSet<VersionTreeEntry> VersionTreeEntries { get; set; } public DbSet<PluginState> PluginStates { get; set; } public static void SetForUpdates() {
public class VersionContext : DbContext
{
public DbSet<VersionTreeEntry> VersionTreeEntries { get; set; }
public DbSet<PluginState> PluginStates { get; set; }
public static void SetForUpdates()
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<VersionContext, Configuration>());
}
}
public class VersionTreeEntry
{
public VersionTreeEntry()
{
Children = new List<VersionTreeEntry>();
PluginStates = new List<PluginState>();
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
public virtual ICollection<VersionTreeEntry> Children { get; set; }
public virtual ICollection<PluginState> PluginStates { get; set; }
public virtual VersionTreeEntry Ancestor { get; set; }
/// <summary>
/// Links to the ProtoBufDataItem Id for the session state.
/// </summary>
public int DataId { get; set; }
public string Notes { get; set; }
[Required]
public DateTime TimeStamp { get; set; }
[MinLength(1, ErrorMessage = "Tag cannot have a zero length")]
[MaxLength(20, ErrorMessage = "A tag name cannot contain over 20 characters")]
public string Tag { get; set; }
public bool IsUiNodeExpanded { get; set; }
[Required]
public string Version { get; set; }
[Required]
public string SessionName { get; set; }
}
public class PluginState
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
public string PluginName { get; set; }
[Required]
public byte[] Data { get; set; }
}
问题是PluginState实例从未真正添加到数据库中。如果我添加代码以手动将它们添加到上下文中,它们确实会被添加,但是指向VersionTreeEntry的外键为null
再说一次,这是一个WCF数据服务,而不是普通的EF,你知道有什么问题吗
干杯将评论部分的答案张贴在这里 同意。最好的方法是调用以下API:
_versionContext.AddRelatedObject(versionTreeEntry, "PluginStates", state);
谢谢
Pratik在调用add方法-\u versionContext.AddLink(versionTreeEntry,“PluginStates”,state)之后,能否在forloop中的代码中添加以下行。希望这有帮助。谢谢普拉蒂克。听起来像是对我的回答:)我也可以用_versionContext.AddRelatedObject(versionTreeEntry,“PluginStates”,state)替换这两行;
_versionContext.AddRelatedObject(versionTreeEntry, "PluginStates", state);