c# - 同时将 Entity Framework 与 SQL Server 和 SQLite 数据库一起使用

标签 c# sql-server entity-framework sqlite

我有一个用于测试目的的 C# .Net 4.0 控制台应用程序(使用 VS 2012)。我的目标是能够创建单个 Entity Framework .edmx 文件,该文件可用于 MS SQL Server 数据库和 SQLite 数据库。基本上,我想使用相同的实体模型类和集合进行查询,但又可以轻松地在两个不同的数据库之间随意切换。

到目前为止,我已经通过连接到 MS Server 数据库并添加我的单个测试表(称为 Contact)来创建我的 .edmx 文件。有了这个,我就可以使用以下代码从我的表中获取数据:

var db = new DataAccess.ContactTestEntities();
foreach (var contact in db.Contacts)
    Console.WriteLine("" + contact.ID + ". " + contact.FirstName + " " + contact.LastName);

现在,我希望能够使用相同的代码,但改为连接到 SQLite 数据库。我已经编写了一个部分类,它允许我像这样在构造时更改连接字符串:

var db = new DataAccess.ContactTestEntities("MY SQLITE CONNECTION STRING");

在这方面它工作正常,除非在尝试查询数据库时出现此错误:

Unable to cast object of type 'System.Data.SQLite.SQLiteConnection' to type 'System.Data.SqlClient.SqlConnection'.

我试图找到解决这个问题的方法,但陷入了死胡同,我正在努力寻找下一步要采取的措施。

这就是我的问题:我怎样才能解决这个问题?或者我可以采用另一种方法来获得相同的预期结果吗?


上述异常的堆栈跟踪:

at System.Data.SqlClient.SqlCommand.set_DbConnection(DbConnection value) at System.Data.Common.Utils.CommandHelper.SetStoreProviderCommandState(EntityCommand entityCommand, EntityTransaction entityTransaction, DbCommand storeProviderCommand) at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) at System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute[TResultType](ObjectContext context, ObjectParameterCollection parameterValues) at System.Data.Objects.ObjectQuery1.GetResults(Nullable1 forMergeOption) at System.Data.Objects.ObjectQuery1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() at System.Data.Entity.Internal.Linq.InternalQuery1.GetEnumerator()
at System.Data.Entity.Internal.Linq.InternalSet1.GetEnumerator()<br/> at System.Data.Entity.Infrastructure.DbQuery1.System.Collections.Generic.IEnumerable.GetEnumerator() at SQLiteTest.Program.ReadFromSqlite() in c:\Development\Projects\Test Applications\SQLiteTest\SQLiteTest\Program.cs:line 82 at SQLiteTest.Program.ReadTests() in c:\Development\Projects\Test Applications\SQLiteTest\SQLiteTest\Program.cs:line 63 at SQLiteTest.Program.ProcessMenu() in c:\Development\Projects\Test Applications\SQLiteTest\SQLiteTest\Program.cs:line 36 at SQLiteTest.Program.Main(String[] args) in c:\Development\Projects\Test Applications\SQLiteTest\SQLiteTest\Program.cs:line 14 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart()

最佳答案

使用 sqlite dbcontext 为 dbcontext 对象创建另一个类并使用相同的模型类。原因很简单,默认实体与 sqlserver db 一起使用。要使用 sqlite,您必须使用 sqlite dbcontext。

关于c# - 同时将 Entity Framework 与 SQL Server 和 SQLite 数据库一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19568250/

相关文章:

oracle - 在 Entity Framework/ODP.NET 中的数据库读/写事件之前设置 Oracle session 变量

UserControls的c#跨线程错误

c# - 检查表是否存在于c#

sql-server - 您能否使 SQLCMD 立即运行脚本中的每个语句而不使用 "GO"?

mysql - T-SQL 和 MySQL 的 SELECT 语法之间的差异

c# - EntityFramework 通过 ID 获取对象?

entity-framework - 我对 POCO + Entity Framework v4 的理解正确吗?

c# - 加载和保存颜色值

c# - mvvm light - 发送带回调的通知消息

java - 如何将微调器选定的项目插入到移动应用程序的 SQL Server 中?