При использовании Entity Framework я разделил его на собственный проект:
- RivWorks.Model - содержит модель сущности
- RivWorks.Controller - использует модель сущности и содержит правила biz
- RivWorks.View.Web - веб-сайт
- RivWorks.View.Services - Проект WCF
Все на сайте работает нормально. Я могу позвонить в контроллер и получить действительную модель обратно. Когда я пытаюсь сделать то же самое из Web.Service, я получаю эту ошибку:
ОШИБКА:
Основной провайдер не смог выполнить ConnectionString.
STACK TRACE:
в System.Data.EntityClient.EntityConnection.ChangeConnectionString (String newConnectionString)
в System.Data.EntityClient.EntityConnection..ctor (String connectionString)
в System.Data.Objects.ObjectContext.CreateEntityConnection (String connectionString)
в System.Data.Objects.ObjectContext..ctor (String connectionString, String defaultContainerName)
at RivWorks.Model.Entities.RivFeedsEntities1..ctor (String connectionString)
at RivWorks.Model.FeedStoreReadOnly..ctor (String connectionString)
в RivWorks.Controller.ProductManager.LookupProduct (String productID, String sku, String urlRef, String env, String logPath)
Я немного смущен тем, почему и копаясь в журналах ошибок, я наконец понял, что строки подключения не читаются из файла конфигурации веб-сайта. Итак, я добавил некоторый код, чтобы поймать это, и на данный момент жестко закодировал значения. Например:
public dataObjects.NegotiateSetup LookupProduct(string productID, string sku, string urlRef, string env, string logPath)
{
string feedConnString = "";
string rivConnString = "";
log.InitializeLogFile(logPath);
dataObjects.NegotiateSetup resultSet = new dataObjects.NegotiateSetup();
try { feedConnString = AppSettings.FeedAutosEntities_connString; }
catch { feedConnString = @"metadata=res://*/Entities.FeedEntities.csdl|res://*/Entities.FeedEntities.ssdl|res://*/Entities.FeedEntities.msl;provider=System.Data.SqlClient;provider connection string='Data Source=***.***.***.***;Initial Catalog=******;Persist Security Info=True;User ID=******;Password="******";MultipleActiveResultSets=True'"; }
try { rivConnString = AppSettings.RivWorkEntities_connString; }
catch { rivConnString = @"metadata=res://*/Entities.RivEntities.csdl|res://*/Entities.RivEntities.ssdl|res://*/Entities.RivEntities.msl;provider=System.Data.SqlClient;provider connection string='Data Source=******;Initial Catalog=******_Dev;Persist Security Info=True;User ID=******;Password="******";MultipleActiveResultSets=True'"; }
try
{
using (RivFeedsEntities1 _dbFeed = new FeedStoreReadOnly(feedConnString).ReadOnlyEntities())
{
using (RivEntities _dbRiv = new RivWorksStore(rivConnString).NegotiationEntities())
{
Но, увы, он все еще дает мне вышеуказанную ошибку! Есть идеи почему?