私は、Entity Framework 4.1とMySQLをデータベースとして、コードファーストアプローチで.NETでクラス継承を実装しようとしています。以下のモデルは、SQL Serverで動作しますが、次のエラーでのMySQLに失敗:.NET EF4.1 + MySQLでのクラス継承
Schema specified is not valid. Errors:
(11,6) : error 0064: Facet 'MaxLength' must not be specified for type 'mediumtext'.
モデルは、古典的なシンプルな例です:SQL Serverでは
public abstract class Vehicle
{
public int Id { get; set; }
public int Year { get; set; }
}
public class Car : Vehicle
{
public string CarProperty { get; set; }
}
public class Bike : Vehicle
{
public string BikeProperty { get; set; }
}
public class Db : DbContext
{
public DbSet<Vehicle> Vehicles { get; set; }
public DbSet<Car> Cars { get; set; }
public DbSet<Bike> Bikes { get; set; }
}
、それはVehicles
という名前だけのテーブルを作成し、カラム:Id
,Year
,Model
およびDiscriminator
;車や自転車のテーブルはありません。 MySQLでは、データベースは作成されていません( "Car"クラスを削除した場合、作成されるため、許可の問題などはありません)。
助けていただければ幸いです!ありがとうございました。
UPDATE 1: 私は以下のコンテキストに切り替え、関係表ごとの階層的なアプローチを使用してみましたが、それは私に別のエラーました:Can't create table 'aimpa.#sql-da8_2c' (errno: 150)
を。
public class Db : DbContext
{
public DbSet<Vehicle> Vehicles { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Vehicle>()
.Map<Car>(o => o.ToTable("Cars"))
.Map<Bike>(o=>o.ToTable("Bikes"));
}
}
UPDATE 2: 私はより多くの何ができるかわからないので、私は、MySQLの開発チームにバグとしてこれを提出しました。それはうまくいくはずですが、そうではありません。常設リンクはhttp://bugs.mysql.com/63920です。
UPDATE 3: これをテストするために、NHibertnate 3.2に切り替えました。ちょうどうまく動作するようです。私はこのORMをよく見ていきますが、私はまだEFにとどまっています。
UPDATE 4:公式のMySQLフォーラムで 、私はreceived a responseこのバグの修正がレビューであることを伝えます。すぐに修正する必要があります。
私は継承を使用していませんが、まったく同じエラーが発生しています。実際、私は 'mediumtext'に設定された単一のデータベース列を見つけることさえできません。だから、これはこれまでの完全な謎です。 – adimauro
私もmediumtextの列を持っていないし、継承を使用しないで、同じエラーを取得...私はバージョン6.5.4.0でMySQLのプロバイダを使用 – X181
多分別の関連するバグ:http://bugs.mysql.com/ bug.php?id = 64288 – X181