9

Chúng tôi có một dự án Entity Framework 5.0 với sự di cư của mã đầu tiên với SQL Server 2008 nhưng tất cả các thuộc tính ngày được tạo ra trong cơ sở dữ liệu như datetime cột - không datetime2.Làm thế nào để chuyển sang datetime2 trong dự án Enitity Khung/SQL Server 2008

Có thể tạo di chuyển bằng cách sử dụng thêm di chuyển sẽ cập nhật tất cả các cột datetime trong cơ sở dữ liệu không? Có cách nào khác dễ dàng để chuyển sang datetime2 ở mọi nơi không?

+0

Bản sao có thể có của [Khung thực thể Force 5 để sử dụng loại dữ liệu datetime2] (https://stackoverflow.com/questions/15248488/force-entity-framework-5-to-use-datetime2-data-type) – hazzik

Trả lời

8

Bạn có thể sử dụng API thông thạo để buộc tạo các cột datetime2 trong DB.

Tôi thấy điều này:

Using DateTime properties in Code-First Entity Framework and SQL Server

Bạn sẽ có thể để có được những ý tưởng.

Hoặc, nếu bạn phải gắn bó với DB hiện tại thì bạn sẽ có thể tạo di chuyển thực thi mã T-SQL tùy chỉnh. Có một ví dụ ở đây:

http://msdn.microsoft.com/en-us/data/jj591621.aspx

+0

cảm ơn Floremin. Tôi thực sự có thể tạo di chuyển với SQL tùy chỉnh. Có cách nào để tự động chuyển đổi không? Có cách nào để nói với mã đầu tiên sử dụng datetime2 cho bất kỳ thuộc tính Date mới nào trong tương lai không? – mykola

+0

Tôi nghĩ rằng liên kết đầu tiên giải thích chính xác điều đó. Fluent API là cách để tùy chỉnh hành vi mã mặc định đầu tiên. – Floremin

23

Đây là một bài cũ, nhưng nếu bạn muốn chuyển tất cả các cột datetime của bạn để datetime2, và sử dụng datetime2 cho bất kỳ cột mới bạn thêm (nói cách khác, làm cho EF sử dụng datetime2 theo mặc định), bạn có thể thêm phương thức này vào phương thức OnModelCreating trên ngữ cảnh của mình:

modelBuilder.Properties<DateTime>().Configure(c => c.HasColumnType("datetime2")); 

Điều đó sẽ nhận được tất cả DateTime và DateTime? các thuộc tính trên tất cả các thực thể trong mô hình của bạn.

+0

Giải pháp tuyệt vời! – arche89

+0

IIRC đây chỉ là EF6. –

+0

Vâng, đây chỉ là EF6, mặc dù nó cũng có thể hoạt động trên EF5 (nếu bạn đang sử dụng EF5, nâng cấp lên 6!) EF7/EF Core có thực hiện khác biệt đáng kể từ EF6, và tôi không nhớ lại nếu EF4/EF5 được hỗ trợ điều này hay không. –

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