ASP.Net Linq to Entities: невозможно загрузить указанный ресурс метаданных. - EntityConnectionStringBuilder - PullRequest
0 голосов
/ 18 декабря 2011

Я прочитал довольно много постов, но это кажется очень полезным, но я не уверен, что понимаю, как реализовать это решение. Я должен поместить этот код в каждый класс, который использует модель лица? Я прочитал документы Microsoft и думаю, я слишком новичок в этом.

Моя модель сущности находится в моем DATALAYER, который является отдельным проектом. У меня также есть слои BUSINESSLOGIC и 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(); 
} 

1 Ответ

0 голосов
/ 18 декабря 2011

Можете ли вы перенести детали подключения в ваши конфигурационные файлы? Вот статья о строках подключения . И, следуя тем же примерам, что и в статье, здесь происходит инициализация и использование контекста:

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())
{

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...