17

Tôi đang phát triển một dự án sẽ sử dụng ASP.NET Web API làm dịch vụ dữ liệu và ứng dụng di động Xamarin làm ứng dụng khách.VS 2015 ASP.NET Web API (EF6) & Xamarin Cho phép di chuyển không thành công

Tôi đang cố gắng để cho phép di cư trong ứng dụng web, nhưng tôi nhận được lỗi sau:

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

Như bạn thấy đấy, tôi đã cố gắng xác định các dự án khởi động một cách rõ ràng nhưng không giống giống như lệnh cho phép di chuyển là rất hạnh phúc về nó.

Đây là dự án tôi vừa tạo, sử dụng đầy đủ .NET (Tôi bị ràng buộc với mô hình TPT/TPH mà EF Core chưa hỗ trợ), vì vậy phiên bản EF là 6.1.3 nhắm mục tiêu .NET 4.6.1.

Tôi đang ở trên Cộng đồng VS 2015 Cập nhật 3 Phiên bản 14.0.25431.01.

Cập nhật

Không thể tái tạo, nhưng vấn đề xảy ra ngay cả khi thêm dự án khởi động giả.
Sự cố đã đăng chéo here, vui lòng bỏ phiếu và chia sẻ thử nghiệm của bạn.

+0

Dự án khởi động của bạn có chứa app.config hoặc web.config mà bạn sử dụng để kết nối với cơ sở dữ liệu không? Bạn cũng có thể sử dụng dự án có chứa dbcontext như một dự án khởi động. – jomsk1e

+0

Nó sử dụng appsettings.json để lưu trữ chuỗi kết nối. Nhưng tôi đã thử thêm chuỗi kết nối vào app.config và nó không giúp được gì. – Shimmy

Trả lời

1

Cũng theo this (được thử nghiệm và hoạt động), cách duy nhất để cho phép di chuyển trong dự án aspnetcore + ef6, là để có một DbContext impl trong thư viện lớp .NET đầy đủ bên ngoài, cộng thêm một dự án khởi động giả.
Sucks nhưng hoạt động.

1

Có vẻ như nó phàn nàn về Using StartUp project 'MyProject.App' nhưng bạn đã chỉ định bắt đầu lên tên dự án với -StartupProjectName MyProject.App

Bạn có thể thử chỉ:

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

Hãy chắc chắn rằng trong đầu của bạn lên tập tin cấu hình dự án bạn có chuỗi kết nối hợp lệ (trừ khi bạn chỉ định tên chuỗi kết nối trong hàm tạo DbContext, chuỗi kết nối của bạn sẽ được gọi là ApplicationDbContext, như DbContext của bạn, nếu tôi nhớ chính xác)


CẬP NHẬT Tôi đã đánh giá thấp vấn đề. Có vẻ như nó không phải là cách bạn chỉ định dự án khởi động, mà là chính dự án khởi động. Tôi đề nghị xem this answer. Đặc biệt chú ý, như tôi đã nói trước đây, rằng chuỗi kết nối tồn tại trong web hoặc app.config trong dự án khởi động và có tên đúng.

+0

Tôi đã thử nó, và [this] (http://pastebin.com/eAKYA7vN) là đầu ra. – Shimmy

+1

Nhận xét về cập nhật: Tôi đã xác minh tất cả các chuỗi kết nối đã được thiết lập tốt và dự án khởi động (bản thân dự án) cũng đã đặt web.config. Tôi tin rằng tùy chọn duy nhất là thêm một ứng dụng giao diện điều khiển giả và đặt nó làm khởi động. – Shimmy

+0

Được tặng 25 tiền thưởng cho công sức, dù sao câu trả lời cũng không hiệu quả. Tôi đã đăng một [vấn đề] (https://github.com/aspnet/EntityFramework6/issues/317) trên repo EF6, vui lòng bình luận. – Shimmy

Các vấn đề liên quan