ASP.实体的Net链接:无法加载指定的元数据资源.——EntityConnectionStringBuilder

本文关键字:元数据 资源 加载 EntityConnectionStringBuilder Net 实体 链接 ASP | 更新日期: 2023-09-27 18:18:04

我已经阅读了相当多的帖子,但这似乎非常有用,但我不确定我理解如何实现这个解决方案。我应该把这个代码在每个类,使用实体模型?我已经通读了微软的文档,我想我在这方面太新手了。

我的实体模型是在我的DATALAYER,这是一个单独的项目。我也有业务逻辑和UI层。从我收集到的信息来看,问题似乎与我的实体模型在不同的项目中有关。对吗?提前感谢!

从另一个帖子一个更好的方法来构建连接字符串是使用EntityConnectionStringBuilder:

public static string GetSqlCeConnectionString(string fileName) 
{ 
    var csBuilder = new EntityConnectionStringBuilder(); 
    csBuilder.Provider = "System.Data.SqlServerCe.3.5"; 
    csBuilder.ProviderConnectionString = string.Format("Data Source={0};", fileName); 
    csBuilder.Metadata = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl",  
        typeof(YourObjectContextType).Assembly.FullName); 
    return csBuilder.ToString(); 
} 
public static string GetSqlConnectionString(string serverName, string databaseName) 
{ 
    SqlConnectionStringBuilder providerCs = new SqlConnectionStringBuilder(); 
    providerCs.DataSource = serverName; 
    providerCs.InitialCatalog = databaseName; 
    providerCs.IntegratedSecurity = true; 
    var csBuilder = new EntityConnectionStringBuilder(); 
    csBuilder.Provider = "System.Data.SqlClient"; 
    csBuilder.ProviderConnectionString = providerCs.ToString(); 
    csBuilder.Metadata = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl", 
        typeof(YourObjectContextType).Assembly.FullName); 
    return csBuilder.ToString(); 
} 

ASP.实体的Net链接:无法加载指定的元数据资源.——EntityConnectionStringBuilder

可以将连接细节移动到配置文件中吗?这是一篇关于连接字符串的文章。遵循与本文相同的示例,下面是上下文的初始化和使用:

using (EntityConnection connection =  EntityConnection("name=AdventureWorksEntities"))
{
    AdventureWorksEntities context = new AdventureWorksEntities(connection);
    context.AddObject("Customer", customer);
    context.SaveChanges();
}
编辑:不需要在调用客户端中重复连接构建代码。你应该把这些细节藏起来,不让打电话的人知道。下面是返回新对象上下文的工厂示例:
//app.config
<connectionStrings>
    <add name="TestEntities" connectionString="...." />
</connectionStrings>
//data entities
public partial class TestEntities : ObjectContext
{
    public TestEntities() : base("name=TestEntities", "TestEntities")
    {
        ...
    }
    ....
}
//factory in Data Access layer
public sealed class TestEntitiesFactory
{
    public static Func<TestEntities> GetNewTestEntitiesInstance { get; set; }
    static TestEntitiesFactory()
    {
        GetNewTestEntitiesInstance = TestEntitiesCreator.CreateTestEntities;
    }
}
public sealed class TestEntitiesDefaultCreator
{
    public static TestEntities CreateTestEntities()
    {
        TestEntities test = new TestEntities();
        //whatever initializations you need
        return test;
    }
}
//business layer
using (TestEntities ctx = TestEntitiesFactory.GetNewTestEntitiesInstance())
{
}