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 :
<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
相关文章推荐
- EF Provider for Access/ODBC 以及ADO.Net Entity Framework 与Linq to SQL的比较和适用场景:
- Get SQL String From Query Object In Entity Framework
- Convert Datetime to String in Sql Server (转)
- Convert Datetime to String in Sql Server
- LINQ to SQL(LINQ2SQL) vs. ADO.NET Entity Framework
- ADO.NET Entity Framework beta 3 和Linq to SQL 在缓存处理上的不同
- Difference between LINQ to SQL and the Entity Framework
- LINQ to SQL(LINQ2SQL) vs. ADO.NET Entity Framework
- 在Azure Website 中配置 Entity Framework Connection String
- Convert Datetime to String in Sql Server
- 配置Spring Cannot convert value of type [java.lang.String] to required type [javax.sql.DataSource]
- LINQ to SQL(LINQ2SQL) vs. ADO.NET Entity Framework(ADOEF)-ccBoy版
- Comparision Linq toSQL with ADO.net Entity Framework
- Convert Datetime to String in Sql Server
- Untie LINQ to SQL Connection String from Application Settings
- EF Provider for Access/ODBC 以及ADO.Net Entity Framework 与Linq to SQL的比较和适用场景
- [转]Entity Framework vs. LINQ to SQL
- linq to sql =>; ADO.NET Entity Framework
- Failed to convert value of type 'java.lang.String' to required type 'org.springframework.web.multipa
- Cannot convert value of type [java.lang.String] to required type [javax.sql.DataSource] for property 'dataSource': no matching e