2011-07-21 31 views
9

Tôi muốn sử dụng MVC 3 và Khung thực thể cho ứng dụng của tôi.Xác thực MVC3 với Khuôn khổ thực thể Mô hình/Cơ sở dữ liệu Đầu tiên

Mô hình sẽ được lưu trữ trong một hội đồng khác với ứng dụng MVC.

Lựa chọn tôi đang thực hiện là sử dụng EF để tạo các thực thể của tôi hoặc sử dụng mã trước tiên.

Với mã đầu tiên, tôi có thể trang trí thành viên với [Bắt buộc] v.v ... Nhưng làm thế nào tôi có thể thêm các thuộc tính nếu EF đã tạo các thực thể từ DB?

Việc EF tạo các thực thể của tôi sẽ tiết kiệm rất nhiều thời gian, nhưng tôi muốn MVC tự động điền xác thực tùy thuộc vào cách tôi đã trang trí thành viên của mình. Điều này có nghĩa không? Nếu vậy, tôi sẽ làm như thế nào?

Trả lời

11

Trong trường hợp đó, MetadataTypeAttribute được sử dụng. Bạn có thể kết hợp nó với các lớp học một phần để đạt được kết quả mong muốn

Và bằng cách này, ở vị trí của bạn, tôi sẽ nghiên cứu nhiều hơn khi quyết định sử dụng Database First và Code First. Đó là tất cả không phải là về tiết kiệm thời gian khi tạo ra các thực thể, có nhiều sự khác biệt giữa hai phương pháp tiếp cận này. Với mục đích tiết kiệm thời gian, bạn có thể sử dụng EF Power Tools để tạo mã các thực thể đầu tiên từ cơ sở dữ liệu - đơn giản.

+0

Cảm ơn, Khi tôi làm điều đó, tôi nhận được lỗi tên mơ hồ. Dưới đây là những gì tôi đã có trong một phần của tôi (thực thể được gọi là Item trong mô hình): – Paul

+0

[MetadataType (typeof (Item))] phần công cộng một phần Item { [StringLength (10), Required] public string MaterialName { nhận được; bộ; } } – Paul

+0

paul, sự mơ hồ 'có thể' được thực hiện với tệp ef edmx đã tồn tại từ trước có thể ?? –

2

Tốt hơn so với tự động tạo ra các đối tượng của bạn, tôi khuyên bạn nên sử dụng Mã đầu tiên hoặc lập bản đồ cơ sở dữ liệu hiện có đến các lớp học POCO (không phải tạo ra các thực thể, chỉ cần tạo ra chúng bằng tay và ánh xạ chúng đến cơ sở dữ liệu hiện có)

ScottGu đã viết khoảng using EF "Code First" with an existing database.

1

Kiểm tra này ra: Trong mô hình mẫu của bạn (tập tin với phần mở rộng model.tt) bạn có thể hack mẫu này để tạo ra các trang trí, trong ví dụ này tôi thêm [Bắt buộc] trang trí cộng với một thông báo lỗi

var simpleProperties = typeMapper.GetSimpleProperties(entity); 
if (simpleProperties.Any()) 
{ 
    foreach (var edmProperty in simpleProperties) 
    { 
     if(!edmProperty.Nullable) 
     {#> 
[Required(ErrorMessage="<#=String.Format("The field {0} is required",edmProperty.ToString())#>")]<# 
     }#> 
<#=codeStringGenerator.Property(edmProperty)#><# 
    } 
} 

Vì vậy, kết quả là một cái gì đó giống như

[Required(ErrorMessage="The field Id is required")] 
    public long Id { get; set; } 

PS: Bạn cũng có thể thêm các using System.ComponentModel.DataAnnotations; bằng cách chỉnh sửa mẫu.

Hy vọng điều này có thể giúp bạn.

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