使用oracle的Entity Framework无法更改连接字符串

时间:2015-04-15 10:59:13

标签: asp.net-mvc oracle entity-framework connection-string

我在ASP.NET MVC 5应用程序中使用Entity Framework(最新版本)和Oracle Driver(最新版本)。我想在运行时为我的模型设置连接字符串,但每次这样做都会从我用来创建模型的表中接收数据。当我更改web.config中的连接字符串时,它是一样的。有人知道它为什么会这样吗?

这是我创建连接字符串的方式:

    public static string CreateConnectionString(string userName, string service)
    {
        const string providerName = "Oracle.ManagedDataAccess.Client";

        OracleConnectionStringBuilder oraBuilder = new OracleConnectionStringBuilder();
        oraBuilder.DataSource = service + ":1521/" + service;
        oraBuilder.UserID = userName;
        oraBuilder.Password ="xxx";
        oraBuilder.PersistSecurityInfo = true;

        EntityConnectionStringBuilder efBuilder = new EntityConnectionStringBuilder();
        efBuilder.Metadata = "res://*/Model2.csdl|res://*/Model2.ssdl|res://*/Model2.msl";
        efBuilder.Provider = providerName;
        efBuilder.ProviderConnectionString = oraBuilder.ConnectionString;
        return efBuilder.ConnectionString;
    }

这是模型构造函数的重载:

public Entities(string connectionString)             :base(connectionString)         {

    }

这是我的连接字符串:

3 个答案:

答案 0 :(得分:0)

     try this connection string:        
     <connectionStrings>
<add name="VoccDbContext" connectionString="metadata=res://*/Entities.Vocc.VoccModel.csdl|res://*/Entities.Vocc.VoccModel.ssdl|&#xD;&#xA;res://*/Entities.Vocc.VoccModel.msl;provider=Oracle.DataAccess.Client;provider connection string=&quot;DATA SOURCE=sameDbName;PASSWORD=somePass;USER ID=someUser;&quot;"providerName="System.Data.EntityClient" />
     </connectionStrings>

答案 1 :(得分:0)

DIRECTORY_SERVERS=(tnsnames.somesite.org:389:636)
DEFAULT_ADMIN_CONTEXT="dc=site,dc=com"
DIRECTORY_SERVER_TYPE=OID

here( LDAP.ORA file) to be modified with correct LDAP Parameters

答案 2 :(得分:0)

不要编辑XXXModels.cs。尝试修改XXXModels.Context.tt

public <#=code.Escape(container)#>()...}

之后添加以下代码
public <#=code.Escape(container)#>(string connectionString)
        : base(connectionString)
    {
<#
if (!loader.IsLazyLoadingEnabled(container))
{
#>
        this.Configuration.LazyLoadingEnabled = false;
<#
}

foreach (var entitySet in container.BaseEntitySets.OfType<EntitySet>())
{
    // Note: the DbSet members are defined below such that the getter and
    // setter always have the same accessibility as the DbSet definition
    if (Accessibility.ForReadOnlyProperty(entitySet) != "public")
    {
#>
        <#=codeStringGenerator.DbSetInitializer(entitySet)#>
<#
    }
}
#>
    }