我試圖在.NET中使用實體框架4.1和MySQL作爲數據庫,使用代碼優先的方法實現類繼承。下面的模型與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'.
該模型是一個典型的簡單的例子:
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; }
}
使用SQL Server,它將只創建一個名爲Vehicles
表列:Id
,Year
,Model
和Discriminator
;沒有汽車或自行車表。在MySQL中,數據庫甚至沒有創建(如果我刪除「Car」類,它創建 - 所以它不是權限或類似的問題)。
任何幫助將不勝感激!謝謝。
更新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"));
}
}
更新2: 我已經提交此爲MySQL開發團隊中的錯誤,因爲我不知道我還能做。它似乎應該工作,但它不。永久鏈接是http://bugs.mysql.com/63920。
UPDATE 3: 我轉換到NHibertnate 3.2,爲了測試這個。似乎工作得很好。我會更好地研究這個ORM,但我更願意留在EF中。
UPDATE 4: 在MySQL官方論壇,我received a response講,對於這個bug修復正在審查中。應該儘快解決。
我沒有使用繼承,但得到完全相同的錯誤。實際上,我甚至找不到一個設置爲'mediumtext'的單個數據庫列。所以,到目前爲止,這是一個完整的謎題。 – adimauro 2012-01-06 16:07:24
我也沒有與中文的專欄,不使用繼承,並得到相同的錯誤...我使用版本6.5.4.0的MySQL提供商 – X181 2012-03-30 15:49:28
也許另一個相關的錯誤:http://bugs.mysql.com/ bug.php?ID = 64288 – X181 2012-03-31 10:14:03