2012-06-20 30 views
5

Trong ứng dụng của chúng tôi, chúng tôi đang sử dụng trình tạo thực thể EF4.0 và POCO Entity để tạo các thực thể từ cơ sở dữ liệu. Để áp dụng chú thích dữ liệu, chúng ta đang tạo các Giao diện và thực hiện các giao diện đó trên các lớp từng phần mà chúng ta đã tạo ra để phù hợp với lớp từng phần được tạo ra bằng cách sử dụng EF.Nhận các thuộc tính tùy chỉnh được áp dụng cho các thực thể được tạo thông qua thuộc tính MetadataType

/*Entity Generated Type*/ 
public partial class SomeEntity : EntityBase 
{ 
    public virtual string SomeProperty 
    { 
     get {...} 
     set {...} 
    } 
} 

/*Interface containing metadata*/ 
public interface ISomeEntityMetadata 
{ 
    [SomeCustomAttribute] 
    string SomeProperty { get; set; } 
} 

/*Partial matching class for interface*/ 
[MetadataType(typeof(ISomeEntityMetadata))] 
public partial class SomeEntity : ISomeEntityMetadata 
{ 
} 

Bây giờ, sử dụng phản chiếu, khi chúng tôi cố gắng để có được nếu 'SomeCustomAttribute' được áp dụng trên 'SomeEntity.SomeProperty', nó sẽ trả rằng thuộc tính không được áp dụng.

Nếu chúng tôi chỉnh sửa mã được tạo và áp dụng Thuộc tính trực tiếp, nó hoạt động.
Nếu chúng ta kiểm tra các lớp một phần sáp nhập để tạo thành một kiểu đơn, nó sẽ làm.
Nếu chúng tôi kiểm tra thuộc tính MetadataType được áp dụng trên loại (sử dụng sự phản chiếu), nó là.
Ngoài ra, khi thực thể được ràng buộc với bất kỳ phần tử giao diện người dùng nào của WPF, các xác thực hoạt động như chúng nên nhưng bằng cách sử dụng sự phản chiếu, chúng tôi không thể tìm thấy Thuộc tính xác thực và/hoặc Thuộc tính tùy chỉnh được áp dụng trên thuộc tính.

Bất kỳ trợ giúp hoặc con trỏ nào sẽ cứu linh hồn.

+0

kiểm tra điều này, tôi đã trả lời câu hỏi này tại đây http://stackoverflow.com/a/24757520/3050647 – elia07

Trả lời

8

Nhưng giao diện/lớp được đánh dấu bằng thuộc tính MetadataType sẽ không bao giờ thêm các thuộc tính đó vào lớp ban đầu của bạn để bạn không bao giờ có thể tìm thấy chúng trên lớp với sự phản ánh. Đó không phải là mục đích của thuộc tính MetadataType. Nếu bạn muốn sử dụng phản chiếu, trước hết bạn phải tìm thuộc tính MetadataType, hãy kiểm tra loại được chuyển đến thuộc tính đó và tìm kiếm thuộc tính tùy chỉnh của bạn trong loại đó. Đó là cách xác thực sử dụng MetadataType.

+0

Tôi cũng không biết điều đó. Tôi nghĩ rằng nó sẽ đính kèm các thuộc tính được áp dụng trong siêu dữ liệu với các thuộc tính trong thực thể. Cảm ơn sự thông cảm. Nó đã giúp tôi định hình giải pháp. –

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