mysql - 将 SQlite 和 MySQL 与实体框架一起使用
问题描述
在我们的应用程序中,我们首先使用 Database 和 SQlite 数据库。
在程序中我们使用这种方法来获取实体
public static SidelDataStoreEntities CreateEntitiesForSpecificSqliteDatabaseName(string databaseName)
{
var connection = new EntityConnectionStringBuilder()
{
Metadata = metadata,
Provider = "System.Data.SQLite.EF6",
ProviderConnectionString = new SqlConnectionStringBuilder() { DataSource = databaseName, }.ConnectionString,
};
sidelDataStoreEntities = new SidelDataStoreEntities(connection.ConnectionString);
return sidelDataStoreEntities;
}
现在我们也希望能够使用 MySQL。这是完全相同的表。我们使用这种方法来获取实体。
public static SidelDataStoreEntities CreateEntitiesForMySqlServer()
{
var connection = new EntityConnectionStringBuilder()
{
Metadata = metadata,
Provider = "MySql.Data.MySqlClient",
ProviderConnectionString = new MySqlConnectionStringBuilder()
{
Database = "datastore",
Server = Settings.Default.DataBaseServer,
IntegratedSecurity = false,
UserID = GetUserId(),
Password = GetPassword()
}.ConnectionString,
};
sidelDataStoreEntities = new SidelDataStoreEntities(connection.ConnectionString);
return sidelDataStoreEntities;
}
在 App.config 我们有
<entityFramework>
<providers>
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework, Version=8.0.22.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
</providers>
</entityFramework>
但是当我们使用 MySQL 数据库时,当我们想要使用实体时,我们会收到此消息
System.InvalidCastException:'无法将'MySql.Data.MySqlClient.MySqlConnection'类型的对象转换为'System.Data.SQLite.SQLiteConnection'类型。'
关键似乎是属性
[DbConfigurationType(typeof(MySqlEFConfiguration))]
如果我们将它与 MySql 一起使用,我们会因为“sideldatastoremodelstorecontainer”而出现另一个错误。在表名中添加
InnerException {"Table 'datastore.sideldatastoremodelstorecontainer.databasemetadata' doesn't
存在"} System.Exception {MySql.Data.MySqlClient.MySqlException}
如果我们与 SQlite 数据库一起使用,此属性会生成运行时错误
所以我们有2个问题
- 如何仅将属性用于 MySQL db?
- 对于 MySQL db,如何抑制表名中的附加字符
谢谢你的帮助。
解决方案
对于第二个问题,问题在于连接器和 NuGet 包之间的版本不同
推荐阅读
- java - onCreate 的 java.lang.NoSuchMethodException
- elasticsearch - Elasticsearch 删除旧数据
- java - Gson - 从 Json 解析为类型化的 ArrayList
- colors - 为什么 1931 CIE xyY 色度图中的颜色是白色的?
- sass - 如何为指南针添加 % 到 mixins
- scala - 如何获取每年日期之间的最小值、最大值和长度?
- xamarin - StackLayout GestureRecognizers 效果
- ios - 如何使用 CATextLayer 根据时间范围在视频上显示不同的文本?
- xamarin.forms - 如何在 xamarin 4 中正确实现 Microsoft.IdentityModel.Clients.ActiveDirectory
- vb.net - 使用 REST API 在 magento 2.1 上更新库存 - 错误 {"message":"Request does not match any route."}