2012-08-30 29 views
16

Tôi đang phát triển một ứng dụng ASP.NET MVC 4 sử dụng VS 2010 và EF 4.3. Nó lấy một số dữ liệu từ một cơ sở dữ liệu bên ngoài và tất cả đã làm việc như mong đợi cho đến khi tôi cố gắng biên dịch lại nó một ngày nào đó. Sau khi biên soạn, tôi nhận được lỗi EF sau:Khuôn khổ thực thể 4.3. Tên cột không hợp lệ 'CreatedOn'

Invalid column name 'CreatedOn'.

Không có thay đổi DB hoặc mã nào - Tôi vừa thêm một số thụt lề để dễ đọc. Các phiên bản ứng dụng trước đó từ TFS cũng ném cùng một ngoại lệ.

Tôi không có CreatedOn tài sản trong thực thể của mình và không có trường như vậy trong cơ sở dữ liệu và tôi không cần nó và không muốn nó trong mọi trường hợp.

Cần phải làm gì để tránh ngoại lệ này?

Đây là tùy chỉnh DB bối cảnh của tôi, tôi sử dụng để truy cập dữ liệu:

public class MyContext<T> : DbContext where T : class, IDataEntity 
{ 
    public MyContext(string connectionKey) 
     : base("name=" + connectionKey) 
    { 
     Configuration.AutoDetectChangesEnabled = false;    
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Label>().Property(item => item.Id).HasColumnName("LabelId"); 
     modelBuilder.Entity<Label>().Ignore(item => item.ChangedBy); 
    } 
} 

Và đây là lớp Label

public class BaseEntity : IDataEntity 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string ChangedBy { get; set; } 
} 

public class Label : BaseEntity 
{ 
} 
+0

Bạn có thể đăng lớp 'Nhãn' không? – Eranga

+0

Đây là lớp Nhãn: Lớp công khai BaseEntity: IDataEntity { public int Id {get; bộ; } Tên chuỗi công khai {get; bộ; } chuỗi công khai ChangedBy {get; bộ; } } lớp công khai Nhãn: BaseEntity {} – msaruyev

+0

Vấn đề này cũng được thảo luận tại đây: http://stackoverflow.com/questions/19646659/createdon-column-in-entity-framework-6 – AXMIM

Trả lời

6

Tìm thấy câu trả lời cho câu hỏi của tôi. Cảm ơn tất cả các trả lời.

Database.SetInitializer<MyContext<Label>>(null); 

Điều này khắc phục sự cố và vô hiệu theo dõi thay đổi DB trong EF.

+0

Cảm ơn điều này rất hữu ích, tuy nhiên tôi chỉ chấp nhận điều này như là một bản sửa lỗi tạm thời để gỡ lỗi vì tôi không chắc chắn muốn tắt theo dõi thay đổi DB mãi mãi ... (xem nhầm lẫn của tôi) –

10

EF 4.3.1 bổ sung thêm một cột CreatedOn đến __MigrationHistory bảng, mà EF 5.0 sau đó bị loại bỏ. Tôi nghi ngờ bạn đã nâng cấp EF lên 4.3.1 kể từ lần cuối bạn cập nhật cơ sở dữ liệu.

Bạn có thể chạy Di chuyển để thêm cột CreatedOn, tự thêm nó theo cách thủ công hoặc nâng cấp lên EF 5.0 khi không cần thiết nữa.

+0

DB không thay đổi bằng mọi cách. Tôi không có bảng "_migrationHistory" trong DB và tôi không có quyền thay đổi thứ gì đó trong DB này. Tôi đang làm việc với .net framework 4.0 và khi cố gắng nâng cấp lên EF 5 với NuGet, hãy nhận các ngoại lệ liên quan đến lược đồ: Giản đồ được chỉ định không hợp lệ. Lỗi: (0,0): cảnh báo 0005: Không thể tìm thấy thông tin lược đồ cho thuộc tính 'Không gian tên'. (0,0): cảnh báo 0005: Không thể tìm thấy thông tin lược đồ cho thuộc tính 'Nhà cung cấp'. (0,0): cảnh báo 0005: Không thể tìm thấy thông tin lược đồ cho thuộc tính 'ProviderManifestToken' ... – msaruyev

+1

Bạn sẽ tìm thấy bảng __MigrationHistory trong 'System Tables'. Tôi e rằng tôi không biết các lỗi này là gì khi nâng cấp lên EF 5.0, nhưng về mặt kỹ thuật nó nên hoạt động trên .NET 4.0 –

+1

Điều này không có ý nghĩa vì tôi gặp lỗi này và tôi chưa bao giờ chạm vào EF5 hoặc EF4. Tôi chỉ sử dụng EF6: X. –

1

Thực tế có cột CreatedOn trong bảng __MigrationHistory nên vấn đề có thể liên quan đến việc di chuyển EF. Nếu không có codechang, việc di chuyển đang chờ xử lý hoặc bất kỳ lỗi nào thực sự là một trường hợp rất lạ.

PS. Tôi thấy điều này, nó có thể hữu ích: http://bstechnical.blogspot.fi/2012/08/invalid-column-name-createdon-code-first.html

+0

Như bạn có thể thấy từ bối cảnh DB tùy chỉnh của tôi, tôi đã đặt Configuration.AutoDetectChangesEnabled = false, nhưng điều này không hữu ích. Có cách nào khác để vô hiệu hóa phát hiện thay đổi db trong EF? – msaruyev

13

Trong trường hợp của tôi, đó là MiniProfiler. Tôi sử dụng EF 5.0, nó sử dụng EF 4.x. Sau khi vô hiệu hóa hồ sơ, ngoại lệ không được ném thêm nữa

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