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();
}
可以将连接细节移动到配置文件中吗?这是一篇关于连接字符串的文章。遵循与本文相同的示例,下面是上下文的初始化和使用:
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())
{
}