Entity framework 使用多对多关系在实体框架中更新

Entity framework 使用多对多关系在实体框架中更新,entity-framework,asp.net-mvc-4,Entity Framework,Asp.net Mvc 4,我在我的项目实体框架6.0 ans ASP NET MVC 4中使用了 我创建了一个更新方法,但当.SaveChanges()插入新对象MEDICAMENTO时,没有更新FKs关系 以下是我的实体: public class MEDICAMENTO { [Key] [DisplayName(displayName: "Código")] public int CODIGO { get; set; } [Displa

我在我的项目实体框架6.0 ans ASP NET MVC 4中使用了

我创建了一个更新方法,但当.SaveChanges()插入新对象MEDICAMENTO时,没有更新FKs关系

以下是我的实体:

    public class MEDICAMENTO
    {
        [Key]
        [DisplayName(displayName: "Código")]
        public int CODIGO { get; set; }

        [DisplayName(displayName: "Farmaco")]
        [Required(ErrorMessage = "Campo Obrigatório!")]
        public string FARMACO { get; set; }

        [DisplayName(displayName: "Nome Comercial")]
        [Required(ErrorMessage = "Campo Obrigatório!")]
        public string NOME_COMERCIAL { get; set; }

        [DisplayName(displayName: "Concentração")]
        [Required(ErrorMessage = "Campo Obrigatório!")]
        public string CONCENTRACAO { get; set; }

        [DisplayName(displayName: "Forma Farmaceutica")]
        [Required(ErrorMessage = "Campo Obrigatório!")]
        public string FORMA_FARMACEUTICA { get; set; }

        [DisplayName(displayName: "Data Inclusão")]
        [DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        [Required(ErrorMessage = "Campo Obrigatório!")]
        public DateTime DATA_INCLUSAO { get; set; }

        [DisplayName(displayName: "Tipo")]
        [Required(ErrorMessage = "Campo Obrigatório!")]
        public string TIPO_MEDICAMENTO { get; set; }

        [DisplayName(displayName: "Código Interno")]
        public string CODIGO_INTERNO { get; set; }

        [DisplayName(displayName: "Categoria")]
        public string CATEGORIA { get; set; }

        public virtual ICollection<MEDICAMENTO_PRESCRITO> MEDICAMENTOS_PRESCRITO { get; set; 
}

    public class PRESCRICAO
    {
        [Key]
        [DisplayName(displayName: "Código")]
        public int CODIGO { get; set; }

        [DisplayName(displayName: "Medicamento Padrão")]
        public bool MEDICAMENTO_PADRAO { get; set; }

        [DisplayName(displayName: "Texto")]
        public string MEDICAMENTO_PADRAO_TEXTO { get; set; }

        [DisplayName(displayName: "Orientação")]
        [Required(ErrorMessage = "Campo Obrigatório!")]
        public string ORIENTACAO { get; set; }

        [DisplayName(displayName: "Atendimento")]
        [Required(ErrorMessage = "Campo Obrigatório!")]
        public ATENDIMENTO ATENDIMENTO { get; set; }

        public ICollection<MEDICAMENTO_PRESCRITO> MEDICAMENTOS_PRESCRITO { get; set; }
    }

    public class MEDICAMENTO_PRESCRITO
    {
        [Key]
        [DisplayName(displayName: "Código")]
        public int CODIGO { get; set; }

        [DisplayName(displayName: "Medicamento")]
        [Required(ErrorMessage = "Campo Obrigatório!")]
        public MEDICAMENTO MEDICAMENTO { get; set; }

        [DisplayName(displayName: "Frequência")]
        public string FREQUENCIA { get; set; }

        [DisplayName(displayName: "Duração")]
        public string DURACAO { get; set; }

        [DisplayName(displayName: "Observação")]
        public string OBSERVACAO { get; set; }

        [DisplayName(displayName: "Prescrição")]
        [Required(ErrorMessage = "Campo Obrigatório!")]
        public PRESCRICAO PRESCRICAO { get; set; }
    }
公共类药物
{
[关键]
[显示名称(显示名称:“Código”)]
public int CODIGO{get;set;}
[DisplayName(DisplayName:“Farmaco”)]
[必需(ErrorMessage=“Campo Obrigatório!”)]
公共字符串FARMACO{get;set;}
[DisplayName(DisplayName:“Nome Comercial”)]
[必需(ErrorMessage=“Campo Obrigatório!”)]
公共字符串NOME_commercial{get;set;}
[DisplayName(DisplayName:“Concentração”)]
[必需(ErrorMessage=“Campo Obrigatório!”)]
公共字符串CONCENTRACAO{get;set;}
[DisplayName(DisplayName:“Forma Farmaceutica”)]
[必需(ErrorMessage=“Campo Obrigatório!”)]
公共字符串FORMA_FARMACEUTICA{get;set;}
[显示名称(显示名称:“数据包括”)]
[DataType(DataType.Date),DisplayFormat(DataFormatString=“{0:dd/MM/yyyy}”,ApplyFormatInEditMode=true]
[必需(ErrorMessage=“Campo Obrigatório!”)]
公共日期时间数据_INCLUSAO{get;set;}
[显示名称(显示名称:“Tipo”)]
[必需(ErrorMessage=“Campo Obrigatório!”)]
公共字符串TIPO_MEDICAMENTO{get;set;}
[DisplayName(DisplayName:“Código Interno”)]
公共字符串CODIGO_INTERNO{get;set;}
[显示名称(显示名称:“分类”)]
公共字符串CATEGORIA{get;set;}
公共虚拟采集药物集;
}
公共课预科
{
[关键]
[显示名称(显示名称:“Código”)]
public int CODIGO{get;set;}
[DisplayName(DisplayName:“Medicamento Padrão”)]
公共医疗机构{get;set;}
[显示名称(显示名称:“Texto”)]
公共字符串MEDICAMENTO_PADRAO_TEXTO{get;set;}
[DisplayName(DisplayName:“东方”)]
[必需(ErrorMessage=“Campo Obrigatório!”)]
公共字符串{get;set;}
[DisplayName(DisplayName:“Atendmento”)]
[必需(ErrorMessage=“Campo Obrigatório!”)]
公共ATENDIMENTO ATENDIMENTO{get;set;}
公共ICollectionMedicamentos_presrito{get;set;}
}
普雷西托公立医院
{
[关键]
[显示名称(显示名称:“Código”)]
public int CODIGO{get;set;}
[DisplayName(DisplayName:“Medicamento”)]
[必需(ErrorMessage=“Campo Obrigatório!”)]
公共医疗{get;set;}
[显示名称(显示名称:“频率”)]
公共字符串频率{get;set;}
[DisplayName(DisplayName:“Duração”)]
公共字符串{get;set;}
[DisplayName(DisplayName:“Observação”)]
公共字符串observaco{get;set;}
[DisplayName(DisplayName:“Prescrição”)]
[必需(ErrorMessage=“Campo Obrigatório!”)]
公共预测预测{get;set;}
}
这是更新方法:

public bool Alterar(PRESCRICAO prescricao)
{
  bool result = false;
  using (cont = new PepContext())
  {
  var temp = cont.PRESCRICAO.Include(a=>a.ATENDIMENTO).Include(m =>     m.MEDICAMENTOS_PRESCRITO).Include("MEDICAMENTOS_PRESCRITO.MEDICAMENTO").Where(p => p.CODIGO == prescricao.CODIGO).First();
   temp.ATENDIMENTO = cont.ATENDIMENTO.Where(a => a.CODIGO == prescricao.ATENDIMENTO.CODIGO).First();
   temp.CODIGO = prescricao.CODIGO;
   temp.MEDICAMENTO_PADRAO = prescricao.MEDICAMENTO_PADRAO;
   temp.MEDICAMENTO_PADRAO_TEXTO = prescricao.MEDICAMENTO_PADRAO_TEXTO;
   temp.ORIENTACAO = prescricao.ORIENTACAO;

   //Delete the old MEDICAMENTO_PRESCRITO list
   foreach (var item in temp.MEDICAMENTOS_PRESCRITO.ToList())
   {
      var tempMed = cont.MEDICAMENTO_PRESCRITO.Where(m => m.CODIGO == item.CODIGO).First();
      cont.MEDICAMENTO_PRESCRITO.Remove(tempMed);
   }


   //Insert the new MEDICAMENTO_PRESCRITO in a temp list
   var novosMedicamentosPrescritos = new List<MEDICAMENTO_PRESCRITO>();
   for (int i = 0; i < prescricao.MEDICAMENTOS_PRESCRITO.Count; i++)
   {
       ovosMedicamentosPrescritos.Add(prescricao.MEDICAMENTOS_PRESCRITO.ElementAt(i));
   }

   //Insert the new MEDICAMENTO_PRESCRITO in temp (PRESCRICAO)
   foreach (var med in novosMedicamentosPrescritos)
    {
       temp.MEDICAMENTOS_PRESCRITO.Add(med);
    }
public bool Alterar(PRESCRICAO PRESCRICAO)
{
布尔结果=假;
使用(cont=new PepContext())
{
var temp=cont.PRESCRICAO.Include(a=>a.ATENDIMENTO).Include(m=>m.MEDICAMENTOS_PRESCRITO).Include(“MEDICAMENTOS_PRESCRITO.MEDICAMENTO”).其中(p=>p.CODIGO==PRESCRICAO.CODIGO).First();
temp.ATENDIMENTO=cont.ATENDIMENTO.Where(a=>a.CODIGO==presricao.ATENDIMENTO.CODIGO).First();
温度CODIGO=预测CODIGO;
临时医疗机构=临时医疗机构;
临时医疗机构=临时医疗机构;
温度定向=预定向;
//删除旧的MEDICAMENTO_PRESCRITO列表
foreach(临时药物列表()中的变量项)
{
var tempMed=cont.MEDICAMENTO_PRESCRITO.Where(m=>m.CODIGO==item.CODIGO.First();
继续药物去除(tempMed);
}
//在临时列表中插入新药物
var novosmedicamentosprecritos=新列表();
对于(int i=0;i

谢谢。

浏览代码有点困难,但如果要更新数据库中的实体,必须使用:

context.Entry(entity).State = EntityState.Modified;
而不是:

context.Entity.Add(entity);
我在你的代码中根本看不到第一个