【问题标题】:How to change the database - Schema used by Entity Framework (mysql database)?如何更改数据库 - 实体框架(mysql 数据库)使用的模式?
【发布时间】:2010-11-21 09:08:51
【问题描述】:

我在一个项目中使用 EntityFramework 来连接 Mysql 数据库。提供者是 Devart Dot.connect。

此应用程序需要使用用户在运行时提供的连接参数连接到数据库。这当然包括 Mysql 数据库名称。

我使用 EntityConnectionStringBuiler 和 EntityConnection 类来构建和存储自定义连接参数。

问题在于,即使使用这样的给定参数,应用程序也总是连接到使用 Visual Studio 向导设计 EntityModel 时指定的数据库。 很奇怪的是,在调试和检查ObjectContext的状态时,自定义的connexion参数都被正确使用了…… 这让我很生气!!!! 有什么线索吗?

【问题讨论】:

  • 一个代码示例会很有帮助——它在调试时真的工作,还是只是在 ObjectContext 中显示正确的连接字符串?

标签: c# mysql database entity-framework connection


【解决方案1】:

在项目中引用dll Devart.Data.MySql.Entity.EF6.dll。

在您的应用程序启动和数据库操作发生之前的某个地方,添加以下内容:

var config = MySqlEntityProviderConfig.Instance;
config.Workarounds.IgnoreSchemaName = true;

您需要参考:

using Devart.Data.MySql.Entity.Configuration;

【讨论】:

    【解决方案2】:

    在这个问题上花了一天时间,我终于明白问题出在model.edmx文件了。

    在这个文件中,每个 EntitySet 有一行。 在每个 EntitySet 元素上都有一个名为 schema 的属性。在 SQL Server 的情况下,此属性设置为相关的表架构:

    实体集名称="annee_civile" EntityType="openemisModel.Store.annee_civile" store:Type="Tables" Schema="mydatabase" />

    如果你在构建自己的EntityConnection时提供了Schema的名字,好像有冲突,最后,即使你在连接参数中指定了另一个,也会使用edmx文件中定义的Schema。

    解决方案只是删除 edmx 文件中的模式名称。 这适用于 MYSQL,但在连接到 SQL 服务器时可能不适用。

    实体集名称="annee_civile" EntityType="openemisModel.Store.annee_civile" store:Type="Tables" Schema="" />

    EntityConnectionStringBuilder :

    string providedString = "User Id=xxxx;Password=xxx;Host=xxxx;Database=anydatabasename"; EntityConnectionStringBuilder entityConnBuilder = new EntityConnectionStringBuilder(); entityConnBuilder.Provider = "Devart.Data.MySql"; entityConnBuilder.Metadata = @"res:///OpenEmisModel.csdl|res:///OpenEmisModel.ssdl|res://*/OpenEmisModel.msl"; entityConnBuilder.ProviderConnectionString = 提供的字符串;

    EntityConnection 和使用它的对象上下文:

    EntityConnection entityConnexionEmis = new EntityConnection(entityConnBuilder.ConnectionString);

    objectcontextEntities testingContext = new objectcontextEntities(entityConnexionEmis);

    该软件现在可以连接到任何数据库名称。

    希望这会有所帮助。

    【讨论】:

    • 希望 Devart 能够为他们的 dotConnect 产品解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 2016-06-02
    相关资源
    最近更新 更多