Entity Framework - Code First 4.1 - ASP.NET MVC3 - PullRequest
0 голосов
/ 05 апреля 2011

Я программирую в MVC3, и у меня есть следующая модель:

 public class L_CabecRegistoPedido
    {
        [Key]
        public int Id { get; set; }
        public int Numero { get; set; }
        public int Ano { get; set; }
        public int Utilizador { get; set; }
        public String Cliente { get; set; }
        public String NomeEmpresa { get; set; }
        public String MarcaEmpresa { get; set; }
        public int? Marca { get; set; }
        public String Projecto { get; set; }
        public String Responsavel { get; set; }
        public String EmailResp { get; set; }
        public String TelefoneResp { get; set; }
        public String DepartamentoEmpresa { get; set; }
        public int? Departamento { get; set; }
        public DateTime DataRegisto { get; set; }
        public int? EstadoPedido { get; set; }
        public int? FasePedido { get; set; }
        public DateTime DataEntregaRequisitada { get; set; }
        public DateTime DataEntrega { get; set; }
        public String Observacoes { get; set; }
        public bool Transformacao { get; set; }
        public int Versao { get; set; }
        public List<L_LinhaRegistoPedido> Linhas { get; set; }

    }

    public class L_LinhaRegistoPedido
    {
        [Key]
        public int Id { get; set; }
        public int? IdCabec { get; set; } /* **Foreign Key to L_CabecRegistoPedido ** */
        public int Utilizador { get; set; }
        public String Artigo { get; set; }
        public String CabDescricao { get; set; }
        public String Descricao { get; set; } /* TODO: espaço neste campo*/
        public Double Quantidade { get; set; }
        public DateTime DataRegisto { get; set; }
        public DateTime DataEntregaRequisitada { get; set; }
        public DateTime DataEntrega { get; set; }
        public int? EstadoLinhasPedido { get; set; }
        public int? FaseLinhasPedido { get; set; }
        public String Observacoes { get; set; }
        public bool Transformacao { get; set; }
        public L_CabecRegistoPedido CabecRegisto { get; set; }
        public List<L_SubLinhaRegistoPedido> SubLinhas { get; set; }

    }

Затем я использую DBContext следующим образом:

 public class AppADO : DbContext
    {

        public AppADO(String ConnectionStringName)
            : base(ConnectionStringName) { }

        public DbSet<L_CabecRegistoPedido> L_CabecRegistoPedido { get; set; }
     }

и на контроллере, когда я делаюSaveChanges () У меня есть этот код:

 [HttpPost]
        public ActionResult Create(FormCollection formCollection)
        {

            L_LinhaRegistoPedido linhaRegisto = new L_LinhaRegistoPedido();
            try
            {
                if (ModelState.IsValid)
                {
                    if (String.IsNullOrEmpty(formCollection["IDArtigo"])) linhaRegisto.Artigo = null; else linhaRegisto.Artigo = formCollection["IDArtigo"];

                    linhaRegisto.IdCabec =   int.Parse(formCollection["IDRegistoPedido"]);
                    linhaRegisto.Quantidade = Double.Parse(formCollection["IDQuantidade"]);
                    linhaRegisto.CabDescricao = formCollection["IDCabDescricao"];
                    linhaRegisto.Descricao = formCollection["IDDescricao"];
                    linhaRegisto.DataRegisto = DateTime.Parse(formCollection["IDDataRegisto"]);
                    linhaRegisto.DataEntrega = DateTime.Parse(formCollection["IDDataEntrega"]);
                    linhaRegisto.DataEntregaRequisitada = DateTime.Parse(formCollection["IDDataEntregaRequisitada"]);

                    if (string.IsNullOrEmpty(formCollection["IDEstadoLinha"])) linhaRegisto.EstadoLinhasPedido = null; else linhaRegisto.EstadoLinhasPedido = int.Parse(formCollection["IDEstadoLinha"]);
                    if (string.IsNullOrEmpty(formCollection["IDFaseLinha"])) linhaRegisto.FaseLinhasPedido = null; else linhaRegisto.FaseLinhasPedido = int.Parse(formCollection["IDFaseLinha"]);

                    linhaRegisto.Observacoes = formCollection["IDObservacoes"];

                    appAdo.L_LinhaRegistoPedido.Add(linhaRegisto);
                    appAdo.SaveChanges();
                }

                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("", ex);
                return View(linhaRegisto);
            }
        }

, но я получаю сообщение об ошибке:

"Неверное имя столбца 'CabecRegisto_Id'."

Этот столбец создан Entity Framework, и я не знаю, как связать внешний ключ L_LinhaRegistoPedido (IdCabec) с L_CabecRegisto для Entity Framework, найти внешний и не генерировать этот автоматический ..

1 Ответ

1 голос
/ 05 апреля 2011

Попробуйте пометить столбец явно ForeignKeyAttribute, например:

public class L_LinhaRegistoPedido
{
    [Key]
    public int Id { get; set; }

    /* **Foreign Key to L_CabecRegistoPedido ** */
    [ForeignKey("CabecRegisto")] 
    public int? IdCabec { get; set; } 
    public L_CabecRegistoPedido CabecRegisto { get; set; }       

    // All other properties omitted 
}

Внутри конструктора ForeignKeyAttribute я поместил имя свойства CabecRegistro, которое, как я полагаю, действует как свойство навигации для IdCabec. Возможно, вы захотите сделать CabecRegistro virtual, чтобы включить загрузку Layzy.

public virtual L_CabecRegistoPedido CabecRegisto { get; set; }

Кстати, если вы вообще удалите IdCabec, EF должен позаботиться о создании отношений внешнего ключа в самой базе данных. В этом случае, конечно, вы теряете контроль над именами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...