17

私は、データサービスとしてASP.NET Web APIを使用し、クライアントとしてXamarinポータブルアプリケーションを使用するプロジェクトを開発しています。VS 2015 ASP.NET Web API(EF6)とXamarin Enable-Migrationsが失敗する

私は、Webアプリでの移行を可能にしようとしているが、私は次のエラーを取得する:

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>** 

あなたが見ることができるように、私は明示的に起動するプロジェクトを指定しようとしましたが、見ていませんenable-migrationsコマンドのようにそれはとても幸せです。

これは私が作成したばかりのプロジェクトで、完全な.NET(私はまだEFコアでサポートされていないTPT/TPHモデルにバインドされています)ですので、EFバージョンは.NET 4.6.1を対象とした6.1.3です。

私はVS Community 2015 Update 3バージョン14.0.25431.01です。

更新

は再現することはできませんが、ダミーの起動プロジェクトを追加する場合でも、問題が発生します。
クロス投稿の問題here、投票して実験を共有してください。

+0

スタートアッププロジェクトに、データベースへの接続に使用するapp.configまたはweb.configが含まれていますか。 dbcontextを含むプロジェクトをスタートアッププロジェクトとして使用することもできます。 – jomsk1e

+0

appsettings.jsonを使用して接続文字列を保存します。しかし、私はapp.configに接続文字列を追加しようとしたが、それは役に立たなかった。 – Shimmy

答えて

1

(テスト済みで動作します)aspnetcore + ef6プロジェクトでの移行を有効にする唯一の方法は、DbContext implを外部の完全な.NETクラスライブラリに加え、ダミーの起動プロジェクトを追加することです。
吸うが動作する。

1

Using StartUp project 'MyProject.App'文句だそうですが、あなたは-StartupProjectName MyProject.App

で起動し、プロジェクト名をすでに指定しているだけ試すことができます:

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

があなたのスタートアッププロジェクトの設定ファイルにあなたが持っていることを確認します有効な接続文字列(DbContextコンストラクタで接続文字列名を指定しない限り、接続文字列はDbContextと同様にApplicationDbContextと呼びます)


更新 私はこの問題を過小評価しました。それはあなたが始動プロジェクトをどのように指定するのではなく、始動プロジェクトそれ自体であるかもしれないようです。私はthis answerを見ることをお勧めします。私が前に言ったように、接続文字列はWebまたはapp.configの起動プロジェクトに存在し、正しい名前を持っていることに特に注意してください。

+0

私は試してみましたが、[this](http://pastebin.com/eAKYA7vN)の出力です。 – Shimmy

+1

更新に関するコメント:すべての接続文字列が正しく設定されていることを確認しました。また、起動プロジェクト(プロジェクト自体)にもweb.configが正しく設定されています。唯一の選択肢は、ダミーのコンソールアプリを追加してスタートアップとして設定することだと私は信じています。 – Shimmy

+0

努力のために25の賞金を授与されましたが、とにかく答えはうまくいかないのです。私は[issue](https://github.com/aspnet/EntityFramework6/issues/317)をEF6レポに投稿しました。コメントしてください。 – Shimmy

関連する問題