zoukankan      html  css  js  c++  java
  • 使用EF code first和asp.net mvc4遇到的问题总结

      最近使用EF code first和asp.net mvc4做项目,遇到些问题,记录一下。

      一、EF code first 生成外键列问题。

        一般情况下,都是先写一个int型外键id属性,然后写一个外键对象属性,也就是导航属性。

    public class UserInfoDemo
        {
            //用户组外键Id
            public int GroupId { get; set; }
    
            //用户组外对象
            public virtual UserGroup UserGroup { get; set; }
        }
    View Code

        但是这样写会在数据库里生成2个字段,GroupId和UserGroup_Id,这是我们不愿意看到的。经过研究和对比发现,如果要在数据库只生成1列,那么实体类int型外键属性必须定义成 外键对象属性名+Id 形式,如下:

    public class UserInfoDemo
        {
            //用户组外键Id 定义成外键对象+Id形式
            public int UserGroupId { get; set; }
    
            //用户组外对象
            public virtual UserGroup UserGroup { get; set; }
        }
    View Code

      二、asp.net mvc中使用DropDownListFor 外键列表

        1.关于异常 不存在具有键“XXX”的“IEnumerable<SelectListItem>”类型的 ViewData 项。

         原因是后台需要准备Ienumerable<SelectListItem>数据,存放到ViewData[key]中,cshtml在取数据的时候key不要写错,就可以了。

        2.关于异常:对一个或多个实体的验证失败。有关详细信息,请参见“EntityValidationErrors”属性。

         如果cshtml中这样写:@Html.DropDownListFor(m => m.UserGroup.Id, items) ,使用外键对象.Id的形式会报这个错。

         原因是又会根据得到的UserGroup对象去数据库添加一条UserGroup数据,而此时UserGroup对象只有Id这一个数据的数据,如果还有其他属性的话,比如Name等等,则为null,导致报错。这是我们不愿看到的,因为对于外键列的下拉列表数据有专门的地方去添加,不能因为添加一个User数据,也把UserGroup外键对象也添加了。

        解决:@Html.DropDownListFor(m => m.UserGroupId, items),直接使用int型的属性,不要用对象.Id的形式即可。

        先写这么多,遇到错误再补充。

        

  • 相关阅读:
    sqlite表结构动态读取工具(Chole ORM框架)
    tomcat可以访问默认页面,但是无法访问webapp下的指定项目
    C#连接solr时提示 java内存异常 (jetty和tomcat哪个更High) java.lang.OutOfMemoryError
    Service Mesh
    Java 使用 UnixSocket 调用 Docker API
    ffmpeg-python 任意提取视频帧
    应用性能测试神器 Gatling,你用过吗?
    多语言应用性能监控系统:Elastic APM
    Ceph Plugin
    MAC iterm2 常用快捷键大全
  • 原文地址:https://www.cnblogs.com/guzhongx/p/codefirst.html
Copyright © 2011-2022 走看看