我第一次玩asp.net。我想将它与 MySQL 数据库一起使用,因为这是我的托管服务提供的,我不想升级/更改服务。我正在使用visual web developer 2010 express。我从默认模板创建了一个 MVC 4 项目。该模板创建了 ASP.NET Simple Membership 对象,这是我正在尝试的工作。使用默认数据库连接字符串时,项目可以正确构建和运行。当我将 web.config 文件更改为指向 MySQL 时,当我尝试导航到帐户文件夹中的任何页面时出现以下错误。
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的“IDENTITY,RoleName nvarc”附近使用正确的语法
当我打开 MySQL 工作台并连接到本地服务器时,我注意到数据库已经创建。如果我删除数据库并再次运行应用程序,它将重新创建。我注意到它是否创建正确,或者是否创建了整个数据库但那里有一些东西。
显然,实体框架创建的 SQL 语法存在问题。我是否需要在 web.config 文件中添加一些内容来告诉它在创建查询时应该使用什么语法?
这两天我一直在寻找这个问题的答案。任何指向正确方向的帮助将不胜感激。
我正在使用 mysql 服务器版本 5.5.27。和连接器 6.5.4.0
这是我的 web.config 文件的 mysql 部分:
<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, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=aspnet-MyWebPage-20120817115958;Integrated Security=SSPI" providerName="System.Data.SqlClient" />
<add name="myDatabaseConnection" connectionString="server=localhost;Port=3306;uid=root;pwd=****;database=myDatabase;" providerName="MySql.Data.MySqlClient" />
</connectionStrings>
编辑添加代码
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public sealed class InitializeSimpleMembershipAttribute : ActionFilterAttribute
{
private static SimpleMembershipInitializer _initializer;
private static object _initializerLock = new object();
private static bool _isInitialized;
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// Ensure ASP.NET Simple Membership is initialized only once per app start
LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock);
}
private class SimpleMembershipInitializer
{
public SimpleMembershipInitializer()
{
Database.SetInitializer<UsersContext>(null);
try
{
using (var context = new UsersContext())
{
if (!context.Database.Exists())
{
// Create the SimpleMembership database without Entity Framework migration schema
((IObjectContextAdapter)context).ObjectContext.CreateDatabase();
}
}
WebSecurity.InitializeDatabaseConnection("LocalMySqlServer", "UserProfile", "UserId", "UserName", autoCreateTables: true);
}
catch (Exception ex)
{
throw new InvalidOperationException("The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588", ex);
}
}
}
}
public class UsersContext : DbContext
{
public UsersContext()
: base("LocalMySqlServer")
{
}
public DbSet<UserProfile> UserProfiles { get; set; }
}