首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用实体框架6访问DB2-LUW 10

使用实体框架6访问DB2-LUW 10
EN

Stack Overflow用户
提问于 2015-06-20 16:47:17
回答 1查看 341关注 0票数 1

我正在开发一个应用程序,其中数据库由最终用户在运行时选择。数据库既可以位于MS服务器上,也可以位于上。我目前正在windows服务器上使用IBM10Express-c进行测试。我正在使用Visual 2013 C#和EntityFramework6进行开发,我已经为DB2支持安装了EntityFramework.IBM.DB2 Nuget包。我正在使用反向工程代码-首先针对现有的SQL server数据库生成我的基本代码。该应用程序对Server数据库运行良好。

我使用System.Data.Common.DbProviderFactories.GetFactory来生成提供程序。

代码语言:javascript
复制
            System.Data.EntityClient.EntityConnectionStringBuilder connectString = new System.Data.EntityClient.EntityConnectionStringBuilder(a_Connection);
            System.Data.Common.DbConnection conn = System.Data.Common.DbProviderFactories.GetFactory(connectString.Provider).CreateConnection();
            conn.ConnectionString = connectString.ProviderConnectionString;
            LB500Database = new LB402_TestContext(conn, true);

a_Connection是provider=IBM.Data.DB2;provider connection string="Database=LISTBILL;User ID=xxxx;Password=yyyy;Server=db210:50000“,并被EntityConnectionStringBuilder正确地解析。

然后尝试访问数据库中的一个表。

代码语言:javascript
复制
            LBData500.LB_System oneSystem;
            System.Linq.IQueryable<LB_System> allSystem = LB500Database.LB_System.Where(g => g.DatabaseVersion == databaseVersion && g.CompanyID == companyID);

我得到一个无效的操作异常“序列不包含匹配元素”,这意味着不返回任何元素。如果删除Where以便返回所有行(表中有一个行),并尝试使用VS调试器枚举结果集,则会看到消息:“创建模型时不能使用上下文。如果上下文在OnModelCreating方法中使用,或者同一个上下文实例由多个线程并发访问,则可能引发此异常。请注意,DbContext和相关类的实例成员不一定是线程安全的。”

我不使用多线程。我不在OnModelCreating里面。

只需将connect字符串更改为指向server即可,因此我认为我的基本方法是正确的。如果我从服务器得到某种错误,我就会有一些事情要做。我可以在Visual内部运行查询,所以我有连接性。

如有任何指示,将不胜感激。

更新:i发现EF对象是使用EF5生成的,使用的是EF6运行时。我首先使用EF6反向工程代码重新生成EF对象。现在我可以连接到数据库并获得一条错误消息:"ERROR 42704DB2/ is 64 SQL0204N \"DBO.LB_SYSTEM\“是一个未定义的名称。”DB2数据库中的模式与我的userid相同(在本例中,并非总是如此)。我将CurrentSchema=xxxx添加到provide字符串中,但EF仍然将dbo作为模式名传递。

现在,我需要一种在运行时更改架构名称的方法。我看到了到codeplex EFModelAdapter (http://efmodeladapter.codeplex.com)的链接。所以我可以试一试。

Update2在浏览了EFModelAdapter之后,决定选择另一条路线。由于我只需要数据库访问而不需要模式管理,所以我决定使用Dapper (https://github.com/StackExchange/dapper-dot-net)。这对于我需要的内容非常有用,并且允许我在访问DB2数据库时更改模式名称。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-01 15:12:42

根据我的更新2,实体框架对我所需要的有点过分了。我切换到了dapper https://github.com/StackExchange/dapper-dot-net,并且对多个DBMS进行了很好的工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30956532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档