EntityFramework 框架使用介绍
简介
Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案。
在.NET 3.5之前,开发者通常使用 ADO.NET 直接连接操作数据库,而Entity Framework的出现可以让开发者更多的从代码层面考虑数据交互,Entity Framework 会把字段映射为实体模型,通过 Lambda表达式 来操作数据,不需要考虑各种类型数据库和拼写SQL语句。同时也有效的防止了 SQL注入。
搭建-以MySQL为例
类库或应用程序项目下新建项
实体模型向导
从EF 4.X开始支持三种构建方法:
Database First:数据库优先,你的项目已经有一个数据库,并且使用工具(如Visual Studio中的EF设计器)依据数据库生成C#或VB类。你可以通过EF设计器修改这些创建的类以及类和数据库之间的映射关系;这种方式的关键是先要有数据,然后才有代码和模型。
Model First:模型优先,通过在EF设计器中创建一个空的容器,在其中设计实体数据模型。这个模型将用于生成数据库以及C#或者VB类。这种方式的关键是先要有模型,然后才有数据库和代码。
Code First:代码优先,开发者只需要写代码,将会自动创建模型和数据库。
现采用基础又最常用的 Database First 方式创建!
更改数据源
连接MySQL需要单独安装 mysql-connector-net 与 mysql-for-visualstudio
修改连接属性
添加连接串
选择框架版本
添加数据库表模型,完成
如果出现闪退、无法编辑数据,尝试修改引用库版本
EntityFramework:6.0.0.0
EntityFramework.SqlServer:6.0.0.0
MySql.Data:6.9.9.0
MySql.Data.Entity.EF6:6.9.9.0
增删改查
1 | //新增 |
错误及处理
EF创建时崩溃
MySql引用库版本修改为6.9.9
报错:Host “”is not allowed to connect to this MySQL server
1 | grant all privileges on *.* to 'root'@'192.168.0.1' identified by '密码'; |
报错:Mysql表 “TableDetails” 中列 “IsPrimaryKey” 的值位 DBNull。
1 | use 库名; |
报错:其他信息: 对一个或多个实体的验证失败。有关详细信息,请参见“EntityValidationErrors”属性。
写入数据与表设定不一致
SaveChanges();方法前后使用:Configuration.ValidateOnSaveEnabled1
2
3ef.Configuration.ValidateOnSaveEnabled = false;
ef.SaveChanges();
ef.Configuration.ValidateOnSaveEnabled = true;