2

初めてasp.netをいじっています。これは私のホスティング サービスによって提供されるものであり、サービスをアップグレード/変更したくないため、MySQL データベースで使用したいと考えています。Visual Web Developer 2010 Express を使用しています。デフォルトのテンプレートから MVC 4 プロジェクトを作成しました。テンプレートは、私が作業しようとしている ASP.NET Simple Membership オブジェクトを作成しました。デフォルトのデータベース接続文字列を使用すると、プロジェクトが正しくビルドおよび実行されます。MySQL を指すように web.config ファイルを変更すると、アカウント フォルダー内のいずれかのページに移動しようとすると、次のエラーが発生します。

SQL 構文にエラーがあります。2 行目の 'IDENTITY, RoleName nvarc' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

MySQL ワークベンチを開いてローカル サーバーに接続すると、データベースが作成されていることがわかります。DB をドロップしてアプリを再度実行すると、再作成されます。それが正しく作成されたかどうか、またはデータベース全体が作成されたかどうかは確かですが、そこに何かがあります。

明らかに、Entity Framework によって作成される SQL 構文に問題があります。クエリを作成するときに使用する構文を web.config ファイルに追加する必要がありますか?

私は過去2日間、これに対する答えを探していました。正しい方向を指し示す助けがあれば幸いです。

私は 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 サーバーに固有の構文を削除してみてください。

于 2013-01-16T09:17:13.567 に答える