我是第一次使用 asp.net。我想将它与 MySQL 数据库一起使用,因为这是我的托管服务提供的,我不想升级/更改服务。我正在使用 Visual Web Developer 2010 Express。我从默认模板创建了一个 MVC 4 项目。该模板创建了 ASP.NET Simple Membership 对象,这正是我想要工作的。使用默认数据库连接字符串时,项目可以正确构建并运行。当我更改 web.config 文件以指向 MySQL 时,当我尝试导航到帐户文件夹中的任何页面时,会出现以下错误。
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTITY, RoleName nvarc' at line 2
当我打开 MySQL 工作台并连接到本地服务器时,我注意到数据库已创建。如果我删除数据库并再次运行应用程序,它将重新创建。我注意到它是否已正确创建,或者是否创建了整个数据库,但那里有一些东西。
显然, Entity Framework 创建的 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; }
}
最佳答案
尝试修改SMP的源代码并删除特定于ms sql server的语法。
关于asp.net - 创建 Entity Framework 数据库时出现 Mysql 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12041802/