在同一项目中使用.net的托管和非托管提供程序

时间:2015-11-04 15:02:54

标签: c# oracle entity-framework

我有一个使用传统SQLCommand对象进行查询的Oracle数据库的解决方案。我最近添加了一个项目,其中包含同一数据库的实体框架上下文。

但是,当我将两个连接字符串添加到父项目时,我收到错误Unable to find the requested .Net Framework Data Provider. It may not be installed.

如果删除了任何一个字符串,那么错误就会消失,尽管我已经失去了我想要的功能。这两种数据访问方法都是独立工作的,但似乎并不能协同工作。

以下是连接字符串:

    <add name="HRMSAppDb" providerName="Oracle.DataAccess.Client" 
     connectionString="User Id=UserName;Password=Password;Data Source=server/service;Connection Timeout=30;"/>
    <add name="HRMSDB" connectionString="metadata=res://*/HRMSDB.csdl|res://*/HRMSDB.ssdl|res://*/HRMSDB.msl;
     provider=Oracle.ManagedDataAccess.Client;
     provider connection string=&quot;CONNECTION TIMEOUT=30;DATA SOURCE=server/service;PASSWORD=password;USER ID=username&quot;" 
     providerName="System.Data.EntityClient" />

那么,如何在同一个项目中包含和使用EF托管连接和非托管SQLCommand连接提供程序?

1 个答案:

答案 0 :(得分:1)

我使用EF和原始sql,其中EF将无法使用此MVVM类型架构高效地完成工作

1)raw sql using EF provider

的摘录
            results =
                "select o.id,CAST(1 AS NUMBER(1))AS CONTACT_TYPE, O.NAME AS ENG_NAME,CAST(0 AS NUMBER(1))  AS SPECIAL_NEEDS, " +
                myModel.StageId + " AS STAGE_ID " +
                "from organization o, contact c " +
                " where o.id = c.id " +
                " and c.disabled = 0 and c.dirty = 0 " +
                " AND utl_match.jaro_winkler_similarity (UPPER('" + myModel.EngName + "'), UPPER (o.NAME)) >  " +
                JaroWinklerDistance +
                " ORDER BY utl_match.jaro_winkler_similarity (UPPER('" + myModel.EngName +
                "'), UPPER (o.NAME)) DESC";


        var data = _context.Database.SqlQuery<CONTACT_DETAILS>(results);

2)我们的连接字符串

<configuration>
  <connectionStrings>
    <add name="XXXEntities" connectionString="metadata=res://*/DataModel.XXX.XXXModel.csdl|res://*/DataModel.XXX.XXXModel.ssdl|res://*/DataModel.XXX.XXXModel.msl;provider=Oracle.DataAccess.Client;provider connection string=&quot;DATA SOURCE=XXX;PASSWORD=XXX;PERSIST SECURITY INFO=True;USER ID=XXXX;" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>