【发布时间】:2020-10-21 14:00:26
【问题描述】:
在我们的应用程序中,我们首先使用 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,如何抑制表名中的附加字符
感谢您的帮助。
【问题讨论】:
-
终于第一个问题的正确答案在这里stackoverflow.com/questions/38327909/…
-
终于第一个问题的正确答案在这里stackoverflow.com/questions/38327909/…
标签: mysql entity-framework sqlite