2

我第一次玩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; }
}
4

2 回答 2

1

尝试修改 SMP 的源并删除特定于 ms sql server 的语法。

于 2013-01-16T09:17:13.567 回答
1

角色提供者仍默认为标准 ASP 角色,它在连接结束时需要一个 SQLServer DB,“身份”是“autoinc”的 SQLServerese。

您可以像这样在 web.config 中设置默认提供程序:-

<configuration>
  <system.web>
    <profile defaultProvider="MySQLProfileProvider"></profile>
    <roleManager defaultProvider="MySQLRoleProvider"></roleManager>
  </system.web>
</configuration>
于 2015-01-14T12:39:23.133 回答