2015-08-09 5 views
0

Я пытаюсь использовать LocalDb с NEventStore, но, хотя я считаю, что правильно настроил базу данных, я продолжаю получать следующее исключение: NEventStore.Persistence.StorageUnavailableException: Invalid object name 'Snapshots'.Как создать экземпляр LocalDB для NEventStore

В коде я сконфигурировать NEventStore использовать базу данных, как это:

this.EventStore = Wireup.Init() 
       .LogToOutputWindow() 
       .UsingInMemoryPersistence() 
       .UsingSqlPersistence("DefaultConnection") 
       .WithDialect(new MsSqlDialect()) 
       .UsingJsonSerialization() 
       .LogToOutputWindow() 
       .Build(); 

У меня есть следующие соединения с базой данных в моем файле web.config:

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\MyDatabase.mdf;Initial Catalog=MyDatabase;Integrated Security=True" providerName="System.Data.SqlClient" />  

И с помощью Visual Studio Я добавлена ​​база данных SqlServerDatabase (MyDatabase.mdf) в папку App_Data моего проекта Asp.net MVC 5. NEventStore, похоже, может открыть базу данных (если я удалю MyDatabase.mdf из моего проекта, я получаю другое исключение). Но, похоже, он не может правильно инициализировать базу данных. Когда я просматриваю базу данных, после запуска в сообщение об ошибке, я вижу, что таблицы не были созданы.

Что делает этот дополнительный странный то, что if this document is correct, Snapshots должен быть вторым сделанным столом. Таким образом, кажется, что нет проблем с созданием первого.

Полный трассировки стека для StorageUnavailableException

at NEventStore.Persistence.Sql.SqlDialects.PagedEnumerationCollection.OpenNextPage() in c:\TeamCity\buildAgent\work\38b1777f2112a252\src\NEventStore\Persistence\Sql\SqlDialects\PagedEnumerationCollection.cs:line 200 
    at NEventStore.Persistence.Sql.SqlDialects.PagedEnumerationCollection.MoveToNextRecord() in c:\TeamCity\buildAgent\work\38b1777f2112a252\src\NEventStore\Persistence\Sql\SqlDialects\PagedEnumerationCollection.cs:line 146 
    at NEventStore.Persistence.Sql.SqlDialects.PagedEnumerationCollection.System.Collections.IEnumerator.MoveNext() in c:\TeamCity\buildAgent\work\38b1777f2112a252\src\NEventStore\Persistence\Sql\SqlDialects\PagedEnumerationCollection.cs:line 70 
    at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() 
    at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source) 
    at NEventStore.Persistence.Sql.SqlPersistenceEngine.GetSnapshot(String bucketId, String streamId, Int32 maxRevision) in c:\TeamCity\buildAgent\work\38b1777f2112a252\src\NEventStore\Persistence\Sql\SqlPersistenceEngine.cs:line 225 
    at NEventStore.Persistence.PipelineHooksAwarePersistanceDecorator.GetSnapshot(String bucketId, String streamId, Int32 maxRevision) in c:\TeamCity\buildAgent\work\38b1777f2112a252\src\NEventStore\Persistence\PipelineHooksAwarePersistanceDecorator.cs:line 45 
    at NEventStore.AccessSnapshotsExtensions.GetSnapshot(IAccessSnapshots accessSnapshots, String bucketId, Guid streamId, Int32 maxRevision) in c:\TeamCity\buildAgent\work\38b1777f2112a252\src\NEventStore\AccessSnapshotsExtensions.cs:line 49 
    at CommonDomain.Persistence.EventStore.EventStoreRepository.GetSnapshot(String bucketId, Guid id, Int32 version) in c:\TeamCity\buildAgent\work\38b1777f2112a252\src\NEventStore\CommonDomain\Persistence\EventStore\EventStoreRepository.cs:line 147 
    at CommonDomain.Persistence.EventStore.EventStoreRepository.GetById[TAggregate](String bucketId, Guid id, Int32 versionToLoad) in c:\TeamCity\buildAgent\work\38b1777f2112a252\src\NEventStore\CommonDomain\Persistence\EventStore\EventStoreRepository.cs:line 54 
    at CommonDomain.Persistence.EventStore.EventStoreRepository.GetById[TAggregate](Guid id, Int32 versionToLoad) in c:\TeamCity\buildAgent\work\38b1777f2112a252\src\NEventStore\CommonDomain\Persistence\EventStore\EventStoreRepository.cs:line 44 
    at CapraLibraShop.DataModel.Repositories.UserAggregateRepository.UserWithEmailExists(EmailAddress emailAddress) in D:\Projects\C#\CapraLibraShop\CapraLibraShop.DataModel\Repositories\UserAggregateRepository.cs:line 22 
    at CapraLibraShop.Controllers.AccountController.Register() in D:\Projects\C#\CapraLibraShop\CapraLibraShop\Controllers\AccountController.cs:line 55 
    at lambda_method(Closure , ControllerBase , Object[]) 
    at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) 
    at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() 

ответ

4

Я буквально нашел ответ через две минуты после просмотра. Но так как мне было трудно разобраться с этим ответом, я думаю, было бы неплохо разместить здесь ответ, вместо того, чтобы удалить вопрос.

Я забыл инициализировать механизм хранения. Я пропустил это из-за сильного синтаксиса. Правильный способ позволить NEventStore инициализировать базу данных путем включения метода InitializeStorageEngine после того, как вы выбрали тип базы данных:

this.EventStore = Wireup.Init() 
       .LogToOutputWindow() 
       .UsingInMemoryPersistence() 
       .UsingSqlPersistence("DefaultConnection") 
       .WithDialect(new MsSqlDialect())    
       .InitializeStorageEngine() // The oh so important line! 
       .UsingJsonSerialization() 
       .LogToOutputWindow() 
       .Build();