我在我的项目Entity Framework 6.0和ASP NET MVC 4中使用。
我创建了一个Update方法但是当.SaveChanges()插入一个新的Object MEDICAMENTO时,不会更新FKs,relantionship。
这是我的实体:
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; }
}
这是更新方法:
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);
}
感谢。
答案 0 :(得分:0)
有点难以完成您的代码,但如果您想要更新数据库中的实体,则必须使用:
context.Entry(entity).State = EntityState.Modified;
而不是:
context.Entity.Add(entity);
我根本没有看到代码中的第一个。