29

Phòng thu trực quan được cài đặt 11 beta như muốn thử nghiệm EF 5 beta nhưng vẫn gặp lỗi này.Bất cứ ai có thể phát hiện ra lý do tại sao tôi vẫn gặp phải lỗi này khi thử nghiệm EF 5 beta

Không tìm thấy phương pháp: 'Void System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior (Boolean)'.

Dự án là ứng dụng MVC3 trống mới và bên dưới là một số mã minh họa cách lỗi xảy ra.

public class Blog 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

public class EFDbContext : DbContext 
{ 
    public DbSet<Blog> Blogs { get; set; } 
} 

public class HomeController : Controller 
{ 
    protected EFDbContext Db = new EFDbContext(); 

    public ActionResult Index() 
    { 
     Blog B = new Blog(); 
     B.Name = "Test";    
     Db.Blogs.Add(B); 
     Db.SaveChanges(); 
     return View(); 
    } 
} 

Đã tìm lỗi trên google nhưng không có gì xuất hiện và tôi không hoàn toàn chắc chắn lỗi nào đang đề cập đến. Tôi đã thêm một đoạn mã ngăn xếp dưới đây trong trường hợp nó sẽ trợ giúp.

[MissingMethodException: Phương pháp không tìm thấy: 'Void System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior (Boolean)'.] System.Data.Entity.Internal.LazyInternalContext.InitializeContext() 0 System. Data.Entity.Internal.InternalContext.Initialize() +31
System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType (Type entityType) +39
System.Data.Entity.Internal.Linq.InternalSet 1.Initialize() +137
System.Data.Entity.Internal.Linq.InternalSet
1.get_InternalContext() +38 System.Data.Entity.Internal.Linq.InternalSet 1.ActOnSet(Action action, EntityState newState, Object entity, String methodName) +236
System.Data.Entity.Internal.Linq.InternalSet
1.Add (Object entity) +200 System.Data.Entity.DbSet`1.Add (TEntity thực thể) +72

Trả lời

60

Hình như bạn đang sử dụng EF5 EntityFramework.dll nhưng sau đó chạy với .NET 4 được cài đặt thay vì .NET 4.5.

Nếu bạn định nhắm mục tiêu .NET 4.5, hãy đảm bảo rằng .NET 4.5 được cài đặt trên máy mà bạn đang chạy mã. VS11 cài đặt .NET 4.5 cho bạn, nhưng bạn cũng có thể cài đặt thời gian chạy trên một máy không phải là dev.

Nếu bạn dự định nhắm mục tiêu .NET 4, hãy đảm bảo rằng bạn đã đặt dự án thành mục tiêu .NET 4 rồi gỡ cài đặt và cài đặt lại gói EF5 NuGet. Bạn phải gỡ cài đặt và cài đặt lại vì NuGet sẽ không thay đổi lắp ráp được sử dụng tự động khi dự án được khôi phục lại.

Cập nhật:

Bạn cũng có thể thấy ngoại lệ này nếu bạn vẫn có EF Tháng Sáu CTP cài đặt hoặc nếu nó thất bại trong việc gỡ bỏ cài đặt một cách chính xác. Hãy thử gỡ cài đặt CTP tháng 6 hoàn toàn trước khi cài đặt VS11. Nếu bạn vẫn thấy vấn đề họ mở một "Nhà phát triển Command Prompt" as Administrator và chạy:

gacutil /u System.Data.Entity,Version=4.2.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089 

Nếu điều này vẫn thất bại, sau đó bạn có thể cố gắng để buộc gỡ bỏ cài đặt từ GAC với:

gacutil /uf System.Data.Entity,Version=4.2.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089 
+0

Đánh giá cao phản hồi. Tuy nhiên tôi đã cài đặt .Net 4.5 và dự án của tôi cũng đang nhắm tới khung .net 4.5. Tôi đã cố gắng chạy EF 5.0 beta trong VS 11 Ultimate Beta với khuôn khổ .Net 4.5 Beta. Tôi sẽ cố gắng gỡ bỏ khung công tác VS11 và .Net 4.5 và bắt đầu lại. – Drauka

+0

Gỡ cài đặt phiên bản beta 11 và khung 4.5 và cài đặt lại phiên bản beta beta11 bao gồm 4.5 .... Sự cố vẫn tiếp diễn và tôi gặp lỗi tương tự. – Drauka

+0

Bạn có thể tìm phiên bản tệp System.Data.Entity.dll trong GAC không? Trong Windows Explorer, mở thư mục C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ System.Data.Entity \ v4.0_4.0.0.0__b77a5c561934e089 hoặc tương đương trên máy của bạn. Nhấn chuột phải vào System.Data.Entity.dll, chọn thẻ Details và xem phiên bản Product. Nếu nó là "4.0.30319.17379" thì bạn đã cài đặt .NET 4.5. Nếu nó là "4.0.30319.1" thì bạn bằng cách nào đó vẫn có .NET 4 được cài đặt. –

5

Hãy chắc chắn rằng bạn có .net 4.5 được cài đặt trên hệ thống đích của bạn. Tôi đã có cùng một thông điệp, hóa ra tôi không có .net 4.5 được cài đặt trên một trong các máy chủ trang trại của tôi.

0

Nếu bạn gặp khó khăn khi loại bỏ 4.2 System.Data.Entity từ GAC như tôi đã làm, nơi nó phàn nàn trình cài đặt phụ thuộc vào nó,

G:\Program Files (x86)\Microsoft Visual Studio 2012 Ultimate\VC>gacutil /uf System.Data.Entity,Version=4.2.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089 
Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.17929 
Copyright (c) Microsoft Corporation. All rights reserved. 


Assembly: System.Data.Entity, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b 
77a5c561934e089, processorArchitecture=MSIL 
Assembly could not be uninstalled because it is required by Windows Installer 
Number of assemblies uninstalled = 0 
Number of failures = 0 

bạn có thể thoát khỏi các phím trong registry từ thư mục này:

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Assemblies\Global 

và chạy lại gacutil/UF lệnh

0

tôi giải quyết vấn đề này loại bỏ chính sách:

C: \ Windows \ Microsoft.NET \ lắp ráp \ GAC_MSIL \ policy.4.0.system.data.entity \ v4.0_0.0.0.0__b77a5c561934e089 \ policy.4.0.system.data.entity.config

nào có thông tin này: ... bindingRedirect oldversion = "4.0.0.0" newVersion = "4.2.0.0" ...

Hy vọng nó giúp Rui

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