EF是否完全支持任何跨平台数据库?

时间:2014-03-24 21:01:21

标签: mysql entity-framework cross-platform

过去几个小时,我试图将当前项目从Sql Server“移植”到MySQL,我最终得到的错误如下:

  

底层提供程序不支持varchar(max)类型(或   uniqueidentifier,或其他东西)

我使用POCO和Code First - 我认为,EF的目的之一是提供简单的存储库“切换”,但即使基本类型未正确映射也会接近:/

我也试过SQlite,但它的形状最差,据我所知,还缺乏Postrage SQL支持。

所以...问题是 - 是否有任何跨平台(最好是免费的)数据库,在EF中有真正的(类似SQL Server)支持?

提前致谢。

最好的问候。

编辑:

通过更具体的说明我的方法:

我使用POCO和Code First,我想自动创建数据库,如果它不存在,我不会在我的POCO类中使用任何特殊的东西,只是标准的.NET类型。示例POCO如下所示:

[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }

[Required]
[StringLength(128)]
public string Name { get; set; }

[Required]
public int AgencyID { get; set; }

[Required]
public bool IsEnabled { get; set; }

#region NavigationProperties

[NavigationProperty]
public virtual Agency Agency { get; set; }

#endregion

EDIT2:

我的app.config看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <entityFramework>
    <!--<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>-->
    <defaultConnectionFactory type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data" />
  </entityFramework>
</configuration>

2 个答案:

答案 0 :(得分:2)

您似乎将sqlServer设置为app / wbeb.config文件中的defaultConnectionFactory,从而导致使用SqlServer类型的EF。您需要将defaultConnectionFactory设置为MySQL连接工厂。

答案 1 :(得分:0)

我整晚都在努力解决同样的错误。修复是违反直觉的,但到目前为止一直很好......似乎问题与使用LocalDB(SQL Server)设置的旧迁移有关,但即使删除旧的迁移也没有效果。我还花费了大量不必要的时间来摆弄我的Web.config,数据库环境等等...我建议在敲打墙头之前尝试以下方法......

  1. 删除迁移文件夹
  2. 尝试启用迁移并添加初始迁移(在PM类型&#34; enable-migrations&#34;然后&#34; add-migration init&#34;)
  3. 如果PM中出现上述错误,请再次删除迁移文件夹,然后打开MySQL Workbench
  4. 在MySQL Workbench中,找到您在connectionString中给出的名称的Schema(看起来像database = whateverYouCalledIt
  5. 在该架构中,打开表格并找到&#34; __ migrationhistory&#34;
  6. 右键单击该表,单击选择行,然后删除所有现有迁移条目,然后重复步骤2
  7. 由于某种原因,当解决方案资源管理器中的迁移删除无效时,这对我来说就是一个诀窍。显然,这并没有删除数据库中的迁移历史记录......

    对于OP的记录,这与ASP.net身份和MVC Auth系统一起工作得很好......我认为SimpleMembership现在已经过时但我没有开发桌面应用......