初めて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; }
}