我意识到有几个类似的问题(例如here和here),但我似乎无法将他们的解决方案应用于我的具体问题。
我有这些课程:
配置文件
public class ProfileModel
{
public ProfileModel()
{
Resources = new List<OptionsModel>();
}
[Key]
public int BID { get; set; }
public string Update_date { get; set; }
public string Description { get; set; }
public byte[] Picture_file { get; set; }
public string Contact { get; set; }
public ICollection<OptionsModel> Resources { get; set; }
public virtual MissionModel Mission { get; set; }
}
任务模型
public class MissionModel
{
[ForeignKey("Business")]
public int MissionModelId { get; set; }
....more properties...
public virtual ProfileModel Business { get; set; }
}
资源
public class OptionsModel
{
[Key]
public int Resource_Id{ get; set; }
public string Resource_name { get; set; }
public string Resource_description { get; set; }
//profile
public virtual ProfileModel Business { get; set; }
//all other config
public virtual AccessModel Access { get; set; }
public virtual GoalModel Goal { get; set; }
public virtual MissionModel Mission { get; set; }
public virtual SettingModel Setting { get; set; }
}
这是一个Web API应用程序,当我使用Json发布帖子时,我收到以下错误:
“ExceptionMessage”:“已检测到关系'filament.Models.MissionModel_Business'的角色'MissionModel_Business_Target'发生冲突更改。”,
从我上面引用的第二个链接看来,它似乎正在尝试创建任务模型,但同一模型似乎有所不同。我尝试了一些东西,但似乎没有什么能够运作得很好。例如,当我删除实际关系一端的导航属性时,它可以正常工作(如同将数据保存到数据库中)但数据未按预期正确组织。
任何帮助都非常有用!
答案 0 :(得分:1)
第二个链接帮我解决了这个问题。我只是将对象中的引用设置为null,然后实体正确映射它们。就我而言,这看起来像这样:
foreach(var a in profileModel.Resources)
{
a.Business = null;
a.Access.Resource = null;
a.Goal.Resource = null;
a.Setting.Resource = null;
}
profileModel.Mission.Business=null;
我不确定这是否是正确的做法,但它确实有效。