2012-03-06 42 views
6

Tôi nhận được một số ngoại lệ chưa được xử lý trong khi sử dụng Code First Migrations of Entity Framework 4.3.Trường hợp ngoại lệ đối với khung thực thể Mã số di cư đầu tiên

Cơ sở dữ liệu ngữ cảnh:

public class MyAppContext : DbContext 
{ 
    public DbSet<Branch> Branches { get; set; } 

    public MyAppContext() 
    { } 
} 

Thực thể:

public class Branch : IEntity<Guid> 
{ 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public bool Active { get; set; } 
} 

Cơ sở dữ liệu khởi tạo:

public class MyAppInitializer : CreateDatabaseIfNotExists<MyAppContext> 
{ 
    protected override void Seed(MyAppContext context) 
    { 
     context.Branches.Add(new Branch() { Id = branchId, Name = "Acme", Description = "Acme", Active = true }); 
     context.SaveChanges(); 
    } 
} 

Tôi đã cài đặt Entity Framework 4.3 để dự án Dal tôi và dự án MVC sử dụng:

Install-Package EntityFramework

tôi đã thiết lập các dự án MVC là dự án khởi động và thực hiện lệnh sau để dự án Dal với bối cảnh cơ sở dữ liệu và khởi tạo:

PM> Enable-Migrations -Xác nhận

Sử dụng dự án NuGet 'Ckms.KeyManagement.Managers'. Lỗi khi tìm kiếm loại ngữ cảnh (chỉ định -Xác nhận để xem chi tiết ngoại lệ). System.Data.Entity.Migrations.Design.ToolingException: Không thể tải một hoặc nhiều loại được yêu cầu. Truy xuất thuộc tính LoaderExceptions để biết thêm thông tin. tại System.Data.Entity.Migrations.Design.ToolingFacade.Run (BaseRunner Á hậu) tại System.Data.Entity.Migrations.Design.ToolingFacade.GetContextTypes()
tại System.Data.Entity.Migrations.MigrationsCommands .FindContextToEnable() Chỉnh sửa lớp Cấu hình được tạo để chỉ định ngữ cảnh là cho phép di chuyển. Đã bật di chuyển mã đầu tiên cho dự án Ckms.KeyManagement.Managers.

Lớp con DbMigrationsCấu hình cấu hình được thêm vào dự án DAL. Nếu tôi thêm loại của DbContext bằng tay và cho phép Migrations tự động:

internal sealed class Configuration : DbMigrationsConfiguration<MyAppContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = true; 
    } 

    protected override void Seed(MyAppContext context) 
    { } 
} 

Những trường hợp ngoại lệ được ném cho Add-Di cư và cập nhật cơ sở dữ liệu-lệnh:

PM> Add-Migration TestEFMigrationsColumn -verbose

Sử dụng dự án NuGet 'Ckms.KeyManagement.Managers'. Sử dụng dự án StartUp ''. System.Reflection.TargetInvocationException: Ngoại lệ đã được ném theo mục tiêu của lệnh gọi. ---> System.ArgumentException: Thông số không chính xác. (Ngoại lệ từ HRESULT: 0x80070057 (E_INVALIDARG)) --- Kết thúc dấu vết ngăn xếp ngoại lệ bên trong --- tại System.RuntimeType.InvokeDispMethod (Tên chuỗi, BindingFlags invokeAttr, Object target, Object [] args, Boolean [] byrefModifiers , Int32 culture, String [] namedParameters) tại System.RuntimeType.InvokeMember (String name, BindingFlags bindingFlags, Binder chất kết dính, mục tiêu Object, Object [] providedArgs, ParameterModifier [] từ bổ nghĩa, văn hóa CultureInfo, String [] namedParams) tại System.Management.Automation.ComMethod.InvokeMethod (phương pháp PSMethod, Đối số [] đối số) Ngoại lệ đã được ném bởi mục tiêu yêu cầu .

Update-Cơ sở dữ liệu:

PM> Cập nhật cơ sở dữ liệu--verbose

Sử dụng dự án NuGet 'Ckms.KeyManagement.Managers'. Sử dụng dự án StartUp ''. System.Reflection.TargetInvocationException: Ngoại lệ đã được ném theo mục tiêu của lệnh gọi. ---> System.ArgumentException: Thông số không chính xác. (Ngoại lệ từ HRESULT: 0x80070057 (E_INVALIDARG)) --- Kết thúc dấu vết ngăn xếp ngoại lệ bên trong --- tại System.RuntimeType.InvokeDispMethod (Tên chuỗi, BindingFlags invokeAttr, Object target, Object [] args, Boolean [] byrefModifiers , văn hóa Int32, string [] namedParameters) tại System.RuntimeType.InvokeMember (string name, bindingFlags bindingFlags, Binder chất kết dính, mục tiêu Object, Object [] providedArgs, ParameterModifier [] từ bổ nghĩa, văn hóa CultureInfo, string [] namedParams) tại System.Management.Automation.ComMethod.InvokeMethod (phương pháp PSMethod, Đối số [] đối số) Ngoại lệ đã được ném bởi mục tiêu yêu cầu .

Bất kỳ ý tưởng nào? Các thông báo lỗi không thực sự hữu ích. Tôi đã thử các lệnh Nuget có và không có cơ sở dữ liệu hiện có.

Trả lời

12

Nếu bạn đang sử dụng thư viện riêng cho truy cập dữ liệu bạn cần phải cung cấp cho nó tên khi chạy truy vấn:

Add-Migration -StartUpProjectName "Dự án Dal của bạn" MyNewMigration

Cập nhật cơ sở dữ liệu--StartUpProjectName "Dự án Dal của bạn" -verbose

+1

Điều đó không giải quyết được tôi sợ. Nếu tôi thêm đối số StartUpProjectName vào lệnh, lỗi sau được nêu ra: System.Reflection.ReflectionTypeLoadException: Không thể tải một hoặc nhiều loại được yêu cầu. –

+1

bạn có cài đặt thích hợp trong cấu hình dll không. Tôi có nghĩa là phần cấu hình, kết nối sql, vv – Marcin

+2

Đó là nó! Tôi đã phải thêm kết nối sql vào app.config của dll DAL. Lưu ý rằng đối số -StartupProjectName phải trỏ đến dự án MVC/ui thay vì dự án DAL. Cảm ơn bạn đã giúp đỡ. –

4
add-migration -Name First -ProjectName DbSet.Framework -StartUpProjectName CodeFirstConsole 

đầu tiên: Tên của Migration

Dbset.Framework: Dự án nơi dbContext và các lớp khác

CodeFirstConsole: Start Up dự án (có thể là web, cửa sổ của bạn hoặc giao diện điều khiển ứng dụng)

3

Đối System.ArgumentException: Các tham số là không chính xác. (Ngoại lệ từ HRESULT: 0x80070057 (E_INVALIDARG)) thêm -projectname và startupprojectname không giúp được gì.

Thiết lập trình đơn thả xuống "Dự án mặc định" của PackageManager Console để trỏ tới Thư viện (trong trường hợp của tôi) nơi tôi muốn "Thư mục di chuyển" và nội dung dự kiến ​​của nó là cách duy nhất để chạy chương trình này từ giải pháp đa.

+0

Paul, bạn có thể mở rộng này một chút? Tôi cũng không thể thêm -projectname và startupprojectname và làm cho nó hoạt động. Nơi nào bạn thiết lập "dự án mặc định" (trong việc sử dụng VS2013 tôi không thấy điều đó). –

1

Tôi cũng gặp vấn đề tương tự. Phát hiện ra rằng nếu bất cứ điều gì là sai với các tập tin cấu hình lỗi này đi lên. Tôi đã có các thẻ trùng lặp trong web.config và xóa các lỗi này đã giải quyết được sự cố của tôi.

0

Chạy cùng một vấn đề, được giải quyết bằng cách xóa <globalization> khỏi web.config.

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