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ó.
Đ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. –
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
Đó 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 đỡ. –