17

Veri hizmeti olarak ASP.NET Web API'sini ve istemci olarak bir Xamarin taşınabilir uygulaması kullanacak bir proje geliştiriyorum. VS 2015 ASP.NET Web API'sı (EF6) & Xamarin Enable-Migrations başarısız olur

ben web uygulamasında göçler etkinleştirmek için çalışıyorum, ancak aşağıdaki hatayı alıyorum: Gördüğünüz gibi

Enable-Migrations -enableautomaticmigrations -ContextTypeName MyProject.Models.ApplicationDbContext -ProjectName MyProject -StartupProjectName MyProject.App -Verbose 
Using StartUp project 'MyProject.App'. 
Exception calling "SetData" with "2" argument(s): "Type 'Microsoft.VisualStudio.ProjectSystem.VS.Implementation.Package.Automation.OAProject' in assembly 
'Microsoft.VisualStudio.ProjectSystem.VS.Implementation, Version=14.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' is not marked as serializable." 
At C:\Users\weitz\.nuget\packages\EntityFramework\6.1.3\tools\EntityFramework.psm1:718 char:5 
+  $domain.SetData('project', $project) 
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : SerializationException 

Exception calling "SetData" with "2" argument(s): "Type 'Microsoft.VisualStudio.ProjectSystem.VS.Implementation.Package.Automation.OAProject' in assembly 
'Microsoft.VisualStudio.ProjectSystem.VS.Implementation, Version=14.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' is not marked as serializable." 
At C:\Users\weitz\.nuget\packages\EntityFramework\6.1.3\tools\EntityFramework.psm1:719 char:5 
+  $domain.SetData('contextProject', $contextProject) 
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : SerializationException 

System.NullReferenceException: Object reference not set to an instance of an object. 
    at System.Data.Entity.Migrations.Extensions.ProjectExtensions.GetPropertyValue[T](Project project, String propertyName) 
    at System.Data.Entity.Migrations.MigrationsDomainCommand.GetFacade(String configurationTypeName, Boolean useContextWorkingDirectory) 
    at System.Data.Entity.Migrations.EnableMigrationsCommand.FindContextToEnable(String contextTypeName) 
    at System.Data.Entity.Migrations.EnableMigrationsCommand.<>c__DisplayClass2.<.ctor>b__0() 
    at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command) 
Object reference not set to an instance of an object. 
**PM>** 

, ben açıkça başlangıç ​​proje belirterek denedim ama görünmüyor enable-migrations komutu gibi bu konuda çok mutlu.

Tam .NET kullanan bir projedir (EF Core'un desteklemediği TPT/TPH modeline bağlıyım), bu nedenle EF sürümü 6.1.3 hedefleme .NET 4.6.1'dir.

VS Topluluk 2015 Güncelleştirme 3 Sürüm 14.0.25431.01'deyim.

Güncelleme

yeniden alamazsın ama bir kukla başlatmak projeyi eklerken sorun bile olmuyor.
Çapraz yayınlanmış sorun here, lütfen oylarınızı deneyin ve paylaşın.

+0

Başlangıç ​​projeniz veritabanına bağlanmak için kullandığınız app.config veya web.config içeriyor mu? Ayrıca dbcontext'i içeren projeyi başlangıç ​​projesi olarak da kullanabilirsiniz. – jomsk1e

+0

Bağlantı dizesini saklamak için appsettings.json'u kullanır. Ancak bağlantı dizesini app.config dosyasına eklemeyi denedim ve yardımcı olmadı. – Shimmy

cevap

1

this (sınanmış ve çalışır durumda) göre, aspnetcore + ef6 projesinde geçişleri etkinleştirmenin tek yolu, tam bir tam .NET sınıf kitaplığında DbContext impl değerine sahip olmak ve ayrıca bir başlangıç ​​projesinin eklenmesidir.
Sucks ama çalışır.

1

O Using StartUp project 'MyProject.App' hakkında şikayetçi görünüyor ama zaten

sadece deneyebilir miyim -StartupProjectName MyProject.App ile başlama proje adı belirttiniz:

Enable-Migrations -enableautomaticmigrations -ContextTypeName MyProject.Models.ApplicationDbContext -ProjectName MyProject -StartupProjectName MyProject.App -Verbose 

emin olun sizin başlangıç ​​sahip proje yapılandırma dosyası içinde geçerli bir bağlantı dizesi (DbContext yapıcısında bir bağlantı dizesi adı belirtmediğiniz sürece, bağlantı dizginiz DbContext'iniz gibi ApplicationDbContext olarak adlandırılmalıdır) doğru olarak hatırlıyorum.


UPDATE Sorunu küçümsedim. Başlangıç ​​projesini nasıl belirlediğiniz değil, başlangıç ​​projesinin kendisi gibi görünmektedir. this answer'a bakmanızı öneriyorum. Daha önce de söylediğim gibi özel dikkat göster, bağlantı dizesinin başlangıç ​​projesindeki web veya app.config dosyasında mevcut ve doğru adı var.

+0

Denedim ve [Bu] (http://pastebin.com/eAKYA7vN) çıktı. – Shimmy

+1

Güncelleme ile ilgili yorum: Tüm bağlantı dizelerinin düzgün bir şekilde ayarlandığını ve başlangıç ​​projesinin (projenin kendisi) web.config'ın da iyi ayarlanmış olduğunu doğruladım. Tek seçeneğin bir kukla konsol uygulaması eklediğine ve başlangıç ​​olarak ayarladığına inanıyorum. – Shimmy

+0

Çaba için 25 ödül verdiler, yine de cevaplar işe yaramıyor. EF6 repo üzerinde bir [issue] (https://github.com/aspnet/EntityFramework6/issues/317) yayınladım, lütfen yorum yapın. – Shimmy