您的位置:首页 > 数据库

Convert EntityFrameWork which called Entity connection string to Sql conncion string

2011-10-30 09:29 351 查看
When use the EntityFrameWork, it will be automated generate the Entity Connection string which like :

<add name="WCFDataEntities" connectionString="metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provider=System.Data.SqlClient;provider connection string="data source=.\sqlexpress;initial catalog=WCFData;integrated security=True;pooling=False;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />

But the sql conntion string which like :

<add name="StoreEntities" connectionString="Data Source=.;Initial Catalog=Store;Integrated Security=false;User Id=sa;Password=User@123;Pooling=False;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />

is common used.

The different is provider the entity’s “System.Data.EntityClient”, the sql’s “System.Data.SqlClient”. And the entity connection string is add which called metadata as "metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;.

So I want to convert the entityframework connection string to the normal sql conntcion string, and make the entityframework model do it self.

So I change the template file which called Model.Context.tt

the original is:

using System;
using System.Data.Objects;
using System.Data.EntityClient;

<#
if (!String.IsNullOrEmpty(namespaceName))
{
#>
namespace <#=code.EscapeNamespace(namespaceName)#>
{
<#
PushIndent(CodeRegion.GetIndent(1));
}
#>
<#=Accessibility.ForType(container)#> partial class <#=code.Escape(container)#> : ObjectContext
{
public const string ConnectionString = "name=<#=container.Name#>";
public const string ContainerName = "<#=container.Name#>";

#region Constructors

public <#=code.Escape(container)#>()
: base(ConnectionString, ContainerName)
{
<#
WriteLazyLoadingEnabled(container);
#>
}

public <#=code.Escape(container)#>(string connectionString)
: base(connectionString, ContainerName)
{
<#
WriteLazyLoadingEnabled(container);
#>
}

public <#=code.Escape(container)#>(EntityConnection connection)
: base(connection, ContainerName)
{
<#
WriteLazyLoadingEnabled(container);
#>
}

#endregion

And the modify after is:

using System;
using System.Configuration;
using System.Data.Objects;
using System.Data.EntityClient;

<#
if (!String.IsNullOrEmpty(namespaceName))
{
#>
namespace <#=code.EscapeNamespace(namespaceName)#>
{
<#
PushIndent(CodeRegion.GetIndent(1));
}
#>
<#=Accessibility.ForType(container)#> partial class <#=code.Escape(container)#> : ObjectContext
{
private const string containerName = "<#=container.Name#>";

private static EntityConnection connection
{
get
{
// Initialize the EntityConnectionStringBuilder.
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();

//Set the provider name.
entityBuilder.Provider = "System.Data.SqlClient";

// Set the provider-specific connection string.
entityBuilder.ProviderConnectionString = ConfigurationManager.ConnectionStrings[containerName].ConnectionString;

// Set the Metadata location.
entityBuilder.Metadata = string.Format(@"res://*/{0}.csdl|res://*/{0}.ssdl|res://*/{0}.msl", "KeyStoreModel");

return new EntityConnection(entityBuilder.ToString());
}
}

#region Constructors

public <#=code.Escape(container)#>()
: base(connection, containerName)
{
}

#endregion

I add the type of EntityConnection,which called connection, it is sovled the entity connection string to sql connection string.

So after run the template, the code look like as :

using System;
using System.Configuration;
using System.Data.Objects;
using System.Data.EntityClient;

namespace Data.DataAccess
{
public partial class StoreEntities : ObjectContext
{
private const string containerName = "StoreEntities";

private static EntityConnection connection
{
get
{
// Initialize the EntityConnectionStringBuilder.
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();

//Set the provider name.
entityBuilder.Provider = "System.Data.SqlClient";

// Set the provider-specific connection string.
entityBuilder.ProviderConnectionString = ConfigurationManager.ConnectionStrings[containerName].ConnectionString;

// Set the Metadata location.
entityBuilder.Metadata = string.Format(@"res://*/{0}.csdl|res://*/{0}.ssdl|res://*/{0}.msl", "StoreModel");

return new EntityConnection(entityBuilder.ToString());
}
}

#region Constructors

public StoreEntities()
: base(connection, containerName)
{
}

#endregion
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: