zoukankan      html  css  js  c++  java
  • Entity Framework 学习系列(2)

    写在前面


    Database First又叫数据库优先的开发方式,是一种比较旧的开发方式,现在已经不再使用这中开发的方式。

    当然,对于一些旧项目进行升级,在已经有了数据库的情况下,使用此方式还是十分方便的。

    环境


    • 开发环境: win10 家庭版

    • 开发工具:Visual Studio 2019

    • 数据库:MySQL 8.0.17

    下载MySQL连接工具


    • 首先,需要安装 mysql-for-visualstudio-1.2.8.msi 下载地址

    • .其次,安装mysql-connector-net-6.10.9.msi 下载地址

    创建Databse First


    1.创建控制台

    • 选择->新建->项目->windows->控制台应用程序。如图所示:

    2.创建数据库

    DROP TABLE IF EXISTS `sys_borrow_user`;
    CREATE TABLE `sys_borrow_user` (
      `user_id` varchar(36) NOT NULL,
      `u_id` varchar(255) DEFAULT NULL,
      `u_password` varchar(255) DEFAULT NULL,
      `gender` varchar(255) DEFAULT NULL,
      `user_name` varchar(255) DEFAULT NULL,
      `creation_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
      `status` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`user_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    

    3.安装 MySQL.Data 和MySQL.Data.Entity

    • 选择,工具->NuGet包管理器->管理解决方案的NuGet 程序包

    • 搜索MySQL,安装MySql.Data 6.10.9 版本

    • 安装MySQL.Data.Entity 6.10.9版本

    注意:

    在安装 MySql.Data 6.10.9MySQL.Data.Entity 6.10.9时的版本号要与安装mysql-connector-net-6.10.9.msi的版本号必须要一致。

    3.在项目中添加数据实体模型

    【1】右击项目,选择添加新项 ,如图所示:

    【2】 单击“下一步”按钮,选择"从数据库中生成",如图所示:

    【3】新建数据库连接,如图所示:

    • 点击下一步,填写配置信息。点击测试测试成功。

    【4】在EF中可以直接调用存储过程、视图、函数的,这我们先选择一张表 如图所示:

    【5】点击“完成”按钮,最后的展示效果如图:

    【6】在代码中添加访问上下文保存到数据库的代码:

    • 在APP.config 中找到连接字符串

    • connectionStrings节点中,添加Password
    <add name="mysqldemodbEntities" connectionString="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;user id=root;Password=root;persistsecurityinfo=True;database=mysqldemodb&quot;" providerName="System.Data.EntityClient" />
    
    • 最后,在Program类中 编写添加的方法
    using System;
    
    namespace myEFDatabaseFirst_01
    {
        class Program
        {
            static void Main(string[] args)
            {
                mysqldemodbEntities db = new mysqldemodbEntities();
                sys_borrow_user user = new sys_borrow_user() {
                    user_id = Guid.NewGuid().ToString().Replace("-",""),
                    u_id="admin",
                    u_password="admin",
                    gender="w",
                    user_name="超级管理员",
                    creation_time=DateTime.Now,
                    status="y"
                };
                db.sys_borrow_user.Add(user);
                db.SaveChanges();
            }
        }
    }
    

    EF在SaveChanges 的时候会遍历上下文容器的每一个代理对象,

    然后根据代理对象的State属性生成不同的SQL语句。

    再一次性的发送到数据库中执行。

    执行完成后,我们可以看到数据库中已经插入一条数据。

    如图所示:

    产生的问题及解决方案


    1.问题1

    • 产生问题:

      方法“MySql.Data.Entity.EFMySqlCommand.set_DbConnection(System.Data.Common.DbConnection)”
      尝试访问方法“MySql.Data.MySqlClient.MySqlConnection.get_Settings()”失败。

    • 产生原因:原来是使用的MySql.Data使用的版本过高,默认使用了最新的8.0.17。

    • 解决方案:将MySql.Data的版本改成6.10.9版本。


    2.问题2

    • 产生问题

      MySqlException: Access denied for user 'root'@'localhost' (using password: NO)。

    • 产生原因:连接字符串没有密码

    • 解决方案:找到连接字符串后,添加Passwork=root;重新生成解决方案。


    3.问题3

    • 产生问题

      出现闪退或者出现如下图所示问题:

    • 产生原因:都是因为项目中引用的MySql.Data.Entity.EF6版本和安装的mysql-connector-net版本不一致。

    • 解决方案:项目中引用的MySql.Data.Entity.EF6版本和安装的mysql-connector-net版本不一致。改成一致即可

  • 相关阅读:
    Django与forms组件校验源码
    局部钩子和和全局钩子
    Form组件参数配置
    Form渲染错误信息
    Django与分页器
    Django与from组件
    uiautomatorview 提示:no android devies were detected by adb
    Flutter 应用入门:包管理
    Flutter 应用入门:路由管理
    Flutter 应用入门:计数器
  • 原文地址:https://www.cnblogs.com/ZengJiaLin/p/11388126.html
Copyright © 2011-2022 走看看