GVKun编程网logo

带有MySQL的ASP.NET MVC 4 EF5(mysql mvcc)

6

如果您想了解带有MySQL的ASP.NETMVC4EF5的相关知识,那么本文是一篇不可错过的文章,我们将对mysqlmvcc进行全面详尽的解释,并且为您提供关于ASP.NETMVC4EF5与MySQL

如果您想了解带有MySQL的ASP.NET MVC 4 EF5的相关知识,那么本文是一篇不可错过的文章,我们将对mysql mvcc进行全面详尽的解释,并且为您提供关于ASP.NET MVC 4 EF5与MySQL、Asp.net Mvc 使用 EF6 code first 方式连接 MySQL 总结、ASP.NET MVC5+EF6+EasyUI 后台管理系统(91)-EF 连接 MySql、asp.net – 带有MVC 4.0的DotNetOpenAuth的有价值的信息。

本文目录一览:

带有MySQL的ASP.NET MVC 4 EF5(mysql mvcc)

带有MySQL的ASP.NET MVC 4 EF5(mysql mvcc)

所以我刚拿起VS2012,我想用EF5启动ASP.NET MVC 4应用程序。

我的主机没有MSSQL,所以我必须使用MySQL。

如何告诉我的应用程序应使用MySQL?(我想使用devart MySQL连接器,也可以使用mysql.com的连接器)

ASP.NET MVC 4 EF5与MySQL

ASP.NET MVC 4 EF5与MySQL

所以我刚刚拿起了VS2012,我想要启动一个带有EF5的ASP.NET MVC 4应用程序。

我的主机没有MSsql,所以我必须使用MysqL。

如何告诉我的应用程序应该使用MysqL? (我想要使用devart MysqL连接器或MysqL.com)

解决方法

您需要使用连接字符串DbProviderFactory和MysqL Connector 6.5.4的自定义DatabaseInitializer设置您的配置。我详细说明了 full step for getting EF5 and MySql to play,including code for the initializers on my blog.如果您需要ASP.Net会员提供程序解决方案,那么我将在 ASP.NET Membership/Role providers for MySQL?发布解决方案,同时提供完整的EF5 MysqL解决方案。

MysqL连接器当前不支持EF 5迁移,ASP.NET仅支持MS sql不是MysqL的SimpleMembership(MVC4默认值)。以下解决方案适用于Code First。

步骤是:

从NuGet抓住EF 5
>从NuGet(6.5.4)或MysqL(6.6.4)中抓取MysqL.Data和MysqL.Data.Entity
>配置MysqL数据提供程序
>配置MysqL连接字符串
>创建自定义MysqL数据库初始化程序
>配置自定义MysqL数据库初始化程序
>如果需要,请配置ASP.NET成员资格

DbProvider

<system.data>
 <DbProviderFactories>
  <remove invariant="MysqL.Data.MysqLClient"/>
  <add name="MysqL Data Provider" invariant="MysqL.Data.MysqLClient"
    description=".Net Framework Data Provider for MysqL" 
    type="MysqL.Data.MysqLClient.MysqLClientFactory,MysqL.Data" />
 </DbProviderFactories>
</system.data>

连接字符串

<connectionStrings>
  <add name="ConnectionStringName" 
    connectionString="Datasource=hostname;Database=schema_name;uid=username;pwd=Pa$$w0rd;" 
    providerName="MysqL.Data.MysqLClient" />
</connectionStrings>

数据库初始化程序

如果您使用NuGet(6.5.4)中的MysqL连接器,则需要自定义初始化程序。代码可在http://brice-lambson.blogspot.se/2012/05/using-entity-framework-code-first-with.html
或http://www.nsilverbullet.net/2012/11/07/6-steps-to-get-entity-framework-5-working-with-mysql-5-5/

然后将其添加到配置中

<configSections>
  <section name="entityFramework" 
    type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection,EntityFramework,Version=5.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" />
</configSections>
<entityFramework>
  <contexts>
      <context type="Namespace.YourContextName,AssemblyName">
         <databaseInitializer 
           type="Namespace.YourChosenInitializer,AssemblyName">
         </databaseInitializer>
      </context>
    </contexts>
    <defaultConnectionFactory 
      type="MysqL.Data.MysqLClient.MysqLClientFactory,MysqL.Data" />
</entityFramework>

ASP.NET成员资格

<membership defaultProvider="MysqLMembershipProvider">
  <providers>
    <clear />
    <add name="MysqLMembershipProvider"
         type="MysqL.Web.Security.MysqLMembershipProvider,MysqL.Web,Version=6.5.4.0,PublicKeyToken=c5687fc88969c44d"
     autogenerateschema="true"
     connectionStringName="*NAME_OF_YOUR_CONN_STRING*"
     enablePasswordRetrieval="false"
     enablePasswordReset="true"
     requiresQuestionAndAnswer="false"
     requiresUniqueEmail="false"
     passwordFormat="Hashed"
     maxInvalidPasswordAttempts="5"
     minrequiredPasswordLength="6"
     minrequiredNonalphanumericCharacters="0"
     passwordAttemptwindow="10"
     passwordStrengthRegularExpression=""
     applicationName="/" />
  </providers>
</membership>

获取AccountController和Views工作:

>删除MVC 4 AccountController,AccountModels,帐户视图文件夹和_LoginPartial共享视图>创建一个新的MVC 3 Web应用程序>将MVC 3 AccountController,AccountModels,帐户视图文件夹和_logonPartial共享视图复制到您的MVC 4应用程序中>在@ Html.Partial(“_ logonPartial”)的共享_Layout视图中替换@ Html.Partial(“_ LoginPartial”)

Asp.net Mvc 使用 EF6 code first 方式连接 MySQL 总结

Asp.net Mvc 使用 EF6 code first 方式连接 MySQL 总结

最近由于服务器变更为 Linux 系统.MsSql for Linux 什么时候出来到生产环境使用还是要很长时间的。于是考虑使用 Mysql 数据库,ORM 使用 EF. 于是先踩下坑顺便记录一下,有需要的 tx 可以参考下.
当你考虑使用 EF 连接 Mysql 的时候肯定是已经在网上搜了一堆教程。网上教程基本都是使用控制台做演示。跟着一步步来姿势没错的话可能会正常运行,但项目中使用分层后,把数据层剥离出去,再使用 code first 连接瞬间蒙 B 了,各种奇葩问题随之而来。咋跟教程说的不一样呢... 所以本文就一步步的介绍如何在分层的项目中使用 EF code first 连接 Mysql.
ps: 本文测试环境为 windows 8.1+Vs2013+MySql5.7.12

一。搭建环境及安装对应组件

首先创建一个空的 MVC 项目后简单的再创建一个类库项目用于 EF 的操作以及实体的存放 (这里为了演示没有创建过多的项目). 最终结果如下:

 

然后在.Data 项目中用 Nuget 安装 EF. 然后安装 MySql 数据驱动所需 dll:

MySQL.Data.Entities.dll  //Nuget默认会带上MySQL.Data.dll

添加一个继承自 DBContext 的类 MyDbContext.cs:

namespace EF2MySqlApp.Data
{
    public class MyDbContext:DbContext
    {
        public MyDbContext()
        {

        }

        public DbSet<BookInfo> BookInfoes { get; set; }
    }
}

接着建个文件夹放实体类 BookInfo.cs:

namespace EF2MySqlApp.Data
{
    public class BookInfo
    {
        public int Id { get; set; }

        public string Number { get; set; }

        public string Name { get; set; }

        public string Author { get; set; }

        public decimal Price { get; set; }

        public bool Deleted { get; set; }

        public DateTime CreatedOn { get; set; }
    }
}

结构类似这样:
  

二。配置 EF


接着该是配置数据库连接字符串了,现在在 App.Config 下添加 connectionString 字节,注意别写到 configSections 上边去了,否则进行添加 Migration 会报节点配置错误.

<connectionStrings>
  <add name="MyDbContext" connectionString="Data Source=localhost;port=3306;Initial Catalog=myappdb;uid=root;password=123456;Charset=utf8" providerName="MySql.Data.MySqlClient" />
</connectionStrings>

然后打开程序包管理器控制台 (-_- 不知道的请自定搜索), 默认项目选择.Data 项目,然后输入这个命令:

Enable-Migrations  //启用迁移

没有错误提示接着输入:

Add-Migration record1  //给本次迁移记录起个名字 这个名字可以随便起,尽量别重名 注意这里的Migration没有s结尾.

这时看到项目下已经多了几个文件:
Configuration.cs 为进行迁移前的配置文件。以时间戳 + 刚才输入的名字的文件为迁移记录文件。本文重点不在此,所以各个作用在此不做过多介绍。有兴趣可自行搜索学习.
Configuration 类的构造函数中有这么一句话,它的作用在于是否启用自动迁移,默认不启用:

AutomaticMigrationsEnabled=false;

Seed 方法中可以添加种子数据,迁移成功后将会执行这个方法,把数据插入到数据库中.

protected override void Seed(EF2MySqlApp.Data.MyDbContext context)
{
     context.BookInfoes.AddOrUpdate(x => x.Id,
         new BookInfo { Name="C#大法好",Author="summit", Number="1234",Price=1024}
      );
     context.SaveChanges();
}

注意最后需要保存一下  


这个时候如果直接 update-database 将会报 Sql Server 连接失败的错误:如下:

在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。....

问题来了,想连接 MySql 怎么默认使用了 Sql Server 呢。这是 EF 默认连接的是 SqlServer 所以要告诉 EF 我们需要使用 Mysql:
1.

Configuration类的构造函数中加入:
SetSqlGenerator("MySql.Data.MySqlClient",new MySql.Data.Entity.MySqlMigrationSqlGenerator());

2.

给MyDbcontext类增加DbConfigurationType特性:
    [DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
    public class MyDbContext:DbContext
    {
        public MyDbContext()
        {

        }

        public DbSet<BookInfo> BookInfoes { get; set; }
    }
ps:这个也可以在config文件里配置,个人比较喜欢用代码控制.

再次运行 Update-Database -v 依然报错,但提示字符串格式不正确,往上翻翻看到 DbContenniton 获取字符串的时候出错了,于是猜测是否是连接字符串的问题:

System.ArgumentException: 从索引 0 处开始,初始化字符串的格式不符合规范。
在 System.Data.Common.DbConnectionOptions.GetKeyValuePair(String connectionString, Int32 currentPosition, StringBuilder buffer, Boolean useOdbcRules, String& keyname, String& keyvalue)  

连接字符串测试没发现问题,那会不会是找不到这个连接字符串呢?N 久后发现在这个控制台中使用的 config 文件默认是到当前启动项目下寻找 config 文件.

把 Data 项目设为启动项后再次运行报:

The underlying provider does not support the type ''nvarchar(max)''.

这个错误由于 MySql 字段不兼容 string 类型,在 string 类型字段前加注解 [MaxLength(100)] 即可解决 (奇怪的是我用 vs2015 测试是不会报这个错误的..).
再次执行 Update-DataBase -v 成功!
如果使用的 mysql 命令行:输入这些命令查看是否创建成功:

show databases;
use myappdb;
select * from bookinfoes;

用其他客户端的那就更不必多说了.  

三。遗留问题

1. 不设置 Data 项目为启动项找不到该项目下 App.Config 里配置的字符串 (控制台默认项目已为该项目)
   如果把连接字符串放到 Web.Config 里则需要在该项目里也安装 ef,mysql.data... 但个人原因并不想在表现层出现 ef 等东西,不放又不去找 App.config 的配置.
这点着实疑惑了好久。每次这样设置启动项也挺麻烦的,所以可以手动指定连接字符串 (亦可以写在其他地方读取过来放进去):

public MyDbContext()
            : base("Data Source=127.0.0.1;port=3306;Initial Catalog=myappdb;uid=root;password=123456;Charset=utf8")
        {

        }

ps: 如果迁移过程中出现未将对象引用到实例之类的错误多半原因就是连接字符串找不到或无效导致的,遇到这种问题先从连接字符串排查.

2. 插入数据中含有中文乱码.
  这个问题网上众说纷纭,改这个配置改那个配置的。跟着改后会发现然并卵... 我这里插入中文后使用 Mysql 控制台查看数据乱码了,使用 Navicat 查看却是正常的。所以这个问题还在观测中,如果各位有什么好的解决办法可以留言 :)
  ([注意] 2016/6/8 更: 我的编码问题已解决。可参考我这篇博文 Mysql 5.7.12 解压版的安装及配置系统编码)
3. 前几天有园友问了个问题,他使用 MiniProfiler 监控 ef to mysql 监控不到 sql 语句。给他回复后也不知道他解决了没..
再次提示下:如果使用 MiniProfiler 过程中报了这个错误:

在尝试添加“Loaded”事件处理程序前,实体框架已在使用一个 DbConfiguration 实例。

检查下你的项目是否使用了 EF 的初始化数据配置。使用了的话需要把 MiniProfilerEF6.Initialize (); 这句放到初始化配置之前.(我一般直接放到最前边 :) )

踩坑才刚刚开始,使用过程中肯定还会有各种问题。还会继续记录下来,给有需要的朋友提个醒.
如果看官中有老司机还望不吝赐教.  -_-!

 

ASP.NET MVC5+EF6+EasyUI 后台管理系统(91)-EF 连接 MySql

ASP.NET MVC5+EF6+EasyUI 后台管理系统(91)-EF 连接 MySql

前言

虽然系统目前只支持MSSQL版本,但是很多朋友公司技术规定必须使用MySql,下面我们就来使用EF连接MySQL吧!

(1)安装MYSQL环境

1.下载安装MYSQL数据,这里我们安装 phpStudy集成环境,这样集成MYSQL数据库,直接启动运行

2.安装Navicat Premium 12 数据库管理工具

Navicat Premium 12等同于MSSQL的SQL Server Management Studio,操作过程差不多,我们到时可以建表,建数据库

3.安装VS对MYSQL支持的工具包 

  • mysql-connector-net-6.9.12
  • mysql-for-visualstudio-1.2.8

  链接:https://pan.baidu.com/s/1Quzqv_zdaYwexNIz0RmcpQ 密码:aijj

(2)在VS创建.NET类库

1.打开VS并新建类库

2.安装支持的MYSQL NUGET包

注意:mysql-connector-net-6.9.12 版本需要与NUGET包中的MySql.Data.Entity一样,不然到时添加EF实体会闪退

3.添加ADO.NET 实体数据模型

从项目右键---新建

4.来自数据库的EF设计器

5.新建链接来链接MySQL数据库

6.成功的操作,会出现让你映射数据库的表过程

总结

特别注意:mysql-connector-net-6.9.12 版本需要与NUGET包中的MySql.Data.Entity一样,不然到时添加EF实体会闪退

 

asp.net – 带有MVC 4.0的DotNetOpenAuth

asp.net – 带有MVC 4.0的DotNetOpenAuth

我一直在尝试使用ASP.Net MVC 4 Developer Preview的DotNetopenAuth示例.

我可以从我的测试页面成功调用我的Action,但由于一行代码而遇到了一个奇怪的问题:

var request = _openid.CreateRequest(openIdUrl);
  var fetch = new FetchRequest();
  fetch.Attributes.Addrequired(WellKNownAttributes.Contact.Email);
  fetch.Attributes.Addrequired(WellKNownAttributes.Name.First);
  fetch.Attributes.Addrequired(WellKNownAttributes.Name.Last);
  request.AddExtension(fetch);
  //return RedirectToAction("Login");
  return request.RedirectingResponse.AsActionResult(); // <-- This is the line throwing the error

如果我注释掉有问题的代码行并在此之前取消注释,我再也看不到运行时错误了.

到目前为止,我尝试过:

1)确保我有正确的重定向:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
            <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        </dependentAssembly>
    </assemblyBinding>
    <legacyHMACWarning enabled="0" />
</runtime>

2)拥有正确的命名空间:

using DotNetopenAuth.OpenId.Extensions.AttributeExchange;
using DotNetopenAuth.OpenId.Extensions;

在我看来,DotNetopenAuth DLL是针对MVC V 1.0.0编译的,绑定重定向要么不起作用,要么扩展方法可能对弃用的方法有效.

MVC版本:4.0.0.0
DotNetopenAuth版本:3.4.7.11121

任何有关使用MVC 4的帮助都将非常感激.
MVC错误屏幕图像如下:

Image of Error Screen

更新
我发现AsActionResult是问题的原因,可能是因为扩展方法与.Net 4.0不兼容.我可以从request.RedirectingResponse获取OutgoingWebResponse对象但是知道如何将它转换为ActionResult

解决方法

您的绑定重定向似乎已损坏.请注意System.Web.Mvc如何出现两次?尝试删除第二个,因为第一个看起来正确.

是的,DNOA是针对MVC 1.0构建的,这是设计使得它适用于所有版本的MVC(给定适当的重定向).这纯粹是一个MVC版本的东西 – 而不是.NET 4.0的东西.

今天关于带有MySQL的ASP.NET MVC 4 EF5mysql mvcc的讲解已经结束,谢谢您的阅读,如果想了解更多关于ASP.NET MVC 4 EF5与MySQL、Asp.net Mvc 使用 EF6 code first 方式连接 MySQL 总结、ASP.NET MVC5+EF6+EasyUI 后台管理系统(91)-EF 连接 MySql、asp.net – 带有MVC 4.0的DotNetOpenAuth的相关知识,请在本站搜索。

本文标签: