我有一个使用mysql作为数据库的现有应用程序。并且可以正常工作。
但是现在。我需要为此创建一个版本。内部和家庭使用。
我的问题是,当我在内部程序中更新功能或添加功能时,我还需要更新家庭版,该家庭版使用sqlite数据库。
存储过程在sqlite中不起作用。因此决定使用实体框架。这样我就可以轻松更改数据库。我已经为我的一张桌子创建了一个模型
其中包含用于自动建议我的应用程序的名称。
这是我的课程
class Given
{
public int id { get; set; }
public string name { get; set; }
public string @operator { get; set; }
public DateTime data_time { get; set; }
}
我这样使用它
class MyDb : DbContext
{
public MyDb() : base("name=sample")
{
}
public DbSet<Given> tble_given { get; set; }
}
我将其命名为 tble_given ,因为它是数据库中我的表的名称
这是我在App.config文件中的连接字符串
<connectionStrings>
<add name="sample" providerName="MySql.Data.MySqlClient" connectionString="server=127.0.0.1; uid=root; pwd=; database=db_sample;default command timeout=20;" />
</connectionStrings>
这是我用于访问数据库中数据的代码
using (var db = new MyDb())
{
db.Database.Connection.Open();
Debug.WriteLine(db.Database.Connection.State);
foreach (var item in db.tble_given.ToList())
{
}
}
我添加了连接打开和连接状态,以检查连接是否有效。
但是当我查询它时。
添加了代码db.tble_given.ToList()
引发的异常:危地马拉Coding.exe中的'System.Data.Entity.Core.ProviderIncompatibleException' 危地马拉Coding.exe中发生类型为'System.Data.Entity.Core.ProviderIncompatibleException'的异常,但未在用户代码中处理 访问数据库时发生错误。这通常意味着与数据库的连接失败。检查连接字符串是否正确,是否使用了适当的DbContext构造函数来指定它或在应用程序的配置文件中找到它。有关DbContext和连接的信息,请参见http://go.microsoft.com/fwlink/?LinkId=386386。有关失败的详细信息,请参见内部异常。
我尝试自己解决它,但我无法使此代码正常工作。
如果连接状态为打开,为什么会出现此错误?
谢谢
答案 0 :(得分:0)
对于每个数据库,将有一个单独的nuget包。在您的情况下,两个数据库都可能具有不同的nuget包。因此,您需要获取与数据库兼容的nuget软件包。