在web.api

时间:2016-07-14 15:22:01

标签: c# entity-framework asp.net-web-api

我意识到有几个类似的问题(例如herehere),但我似乎无法将他们的解决方案应用于我的具体问题。

我有这些课程:

配置文件

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'发生冲突更改。”,

从我上面引用的第二个链接看来,它似乎正在尝试创建任务模型,但同一模型似乎有所不同。我尝试了一些东西,但似乎没有什么能够运作得很好。例如,当我删除实际关系一端的导航属性时,它可以正常工作(如同将数据保存到数据库中)但数据未按预期正确组织。

任何帮助都非常有用!

1 个答案:

答案 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; 

我不确定这是否是正确的做法,但它确实有效。