我试图在.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