使用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; }
}
但是这样写会在数据库里生成2个字段,GroupId和UserGroup_Id,这是我们不愿意看到的。经过研究和对比发现,如果要在数据库只生成1列,那么实体类int型外键属性必须定义成 外键对象属性名+Id 形式,如下:
public class UserInfoDemo
{
//用户组外键Id 定义成外键对象+Id形式
public int UserGroupId { get; set; } //用户组外对象
public virtual UserGroup UserGroup { get; set; }
}
二、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的形式即可。
先写这么多,遇到错误再补充。
使用EF code first和asp.net mvc4遇到的问题总结的更多相关文章
- ASP.NET Web API实践系列02,在MVC4下的一个实例, 包含EF Code First,依赖注入, Bootstrap等
本篇体验在MVC4下,实现一个对Book信息的管理,包括增删查等,用到了EF Code First, 使用Unity进行依赖注入,前端使用Bootstrap美化.先上最终效果: →创建一个MVC4项目 ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(4)-构建项目解决方案 创建EF DataBase Frist模式
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(4)-构建项目解决方案 创建EF DataBase Frist模式 进行本次文章之前,我们可能需要补充一些 ...
- IoC容器Autofac - Autofac + Asp.net MVC + EF Code First(转载)
转载地址:http://www.cnblogs.com/JustRun1983/archive/2013/03/28/2981645.html 有修改 Autofac通过Controller默认构造 ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(5)-EF增删改查by糟糕的代码
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(5)-EF增删改查by糟糕的代码 上一讲我们创建了一系列的解决方案,我们通过一个例子来看看层与层之间的关系 ...
- 使用EF Code First搭建一个简易ASP.NET MVC网站,允许数据库迁移
本篇使用EF Code First搭建一个简易ASP.NET MVC 4网站,并允许数据库迁移. 创建一个ASP.NET MVC 4 网站. 在Models文件夹内创建Person类. public ...
- ASP.NET MVC4中调用WEB API的四个方法
http://tech.it168.com/a2012/0606/1357/000001357231_all.shtml [IT168技术]当今的软件开发中,设计软件的服务并将其通过网络对外发布,让各 ...
- MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(19)-权限管理系统-用户登录
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(19)-权限管理系统-用户登录 我们之前做了验证码,登录界面,却没有登录实际的代码,我们这次先把用户登录先 ...
- ASP.NET MVC4 json序列化器
ASP.NET MVC4中调用WEB API的四个方法 2012年06月07日00:05 it168网站原创 作者:廖煜嵘 编辑:景保玉 我要评论(0) [IT168技术]当今的软件开发中,设计软件的 ...
随机推荐
- 关于C# webform 项目发布 aspx页面无任何代码 每个页面都以dll形式发布
关于C# webform 项目发布 注意:aspx页面无任何代码,每个页面都以dll形式发布带bin文件夹里 具体操作方法如下图:
- 追访现代主流程序员的家庭事业观---禅宗派程序员KUROKY
Kuroky,一个被人遗忘的当代主流程序员. 在他的内心深处有着怎样的心路历程 他的快乐与悲伤,都是一个禅 独家专访kuroky: 记者:作为现代主流程序员,你内心的苦楚玉欢乐通过什么来发现? 大师: ...
- DOM结构学习备忘
1.动态修改页面title: document.title="项目启动33"; 2.IE中打开UTF-8编码的网页中title显示空白页的问题 3.
- ionic中的生命周期函数
//ionic中的生命周期函数 onPageLoaded(){ //page初始化时 console.log("page 1 : page loaded"); } //在这里可以做 ...
- HTML文件中使用Java程序
HTML文件中使用Java程序:简而言之,在HTML文件中引入java应用程序,并通过javascript调用其方法. 一. 运行环境 1.JAVA_HOME.CLASSPATH.PATH配置正确 ...
- 利用Nutch和Tomcat构建搜索引擎
利用Nutch和Tomcat构建搜索引擎 1.安装环境及软件版本介绍 本教程是在Linux Ubuntu 12.04 desktop i386操作系统上搭建,结合使用了Nutch-1.2和Apache ...
- bootstrap2.3.2 modal 用href时有缓存
$('body').on('hidden', '.modal', function () {$(this).removeData('modal');}); 直接在js里加入上面的代码就可以解决缓存问题 ...
- ADO.NET笔记——使用DataAdapter执行增删改操作
相关知识: DataSet中的数据一旦从数据库下载下来,便不再与数据库保持联系.如果修改了DataSet中的数据,需要重新建立连接,并且通过SQL命令将修改更新到数据库去 编写SQL命令往往比较繁琐和 ...
- Linux man 用法小结(Linux指令学习笔记)
今天买了一本<<Linux命令行与shell脚本编程大全>>,想利用暑假放假的时间系统的学习一下 Linux的shell脚本.今天看了一下书,才发现我之前学习,把Linux s ...
- jQuery 判断所有图片加载完成
对于图片的处理,例如幻灯片播放.缩放等,都是依赖于在所有图片完成之后再进行操作. 今天来看下如何判断所有的图片加载完成,而在加载完成之前可以使用 loading 的 gif 图表示正在加载中. 一.普 ...