2011-12-31 28 views
5

Làm cách nào để thêm chú thích/thuộc tính vào lớp học hoặc phương pháp của các lớp trong mô hình của tôi, được tạo từ tệp Model.edmx của tôi? Lý do tôi hỏi điều này là vì mỗi lần tôi thêm chú thích vào một lớp Model.Designer.cs, chú giải này biến mất khi tôi thực hiện thay đổi đối với tệp Model.edmx của mình thông qua trình thiết kế.Mô hình MVC từ tệp EDMX - Thêm chú thích tùy chỉnh vào nó và khiến chúng ở lại?

Cụ thể hơn, tôi đang tìm cách thêm chú thích AllowHtml vào một thuộc tính cụ thể trong một lớp mô hình của tôi và làm cho nó ở lại đó thậm chí sau khi rối tung xung quanh nó.

Đây là mã bộ điều khiển. Nội dung Nội dung của lớp Phân đoạn là lớp khiến trình điều khiển của tôi bị lỗi khi được nhập bằng HTML.

[FacebookAuthorize(Permissions = AuthenticationController.ExtendedPermissions, LoginUrl = "/Authentication/LogOn?ReturnUrl=~/Segment/Contribute")] 
    [HttpPost] 
    [ValidateInput(false)] 
    public ActionResult Contribute(int id, string content) 
    { 

     var container = new ModelContainer(); 

     var parent = container.SegmentSet.SingleOrDefault(s => s.Id == id); 

     var segment = new Segment(); 
     segment.Content = content; //this crashes with HTML data. 
     segment.Owner = AuthenticationController.Authentication.GetUser(container); 
     segment.TimeModified = DateTime.UtcNow; 
     segment.TimePosted = DateTime.UtcNow; 

     container.AddToSegmentSet(segment); 

     if (!parent.Children.Contains(segment)) 
     { 
      parent.Children.Add(segment); 
      segment.Parent = parent; 
     } 

     container.SaveChanges(); 

     return RedirectToAction("Index", "Home"); 
    } 

Trả lời

14

Bạn có thể sử dụng MetadataTypeAttribute để mở rộng lớp học của bạn:

[MetadataType(typeof(MyEdmxClassExtension))] 
public partial class MyEdmxClass { } 

public class MyEdmxClassExension 
{ 
    [AllowHtml] // Add the attributes you want to find on your property 
    public string ThePropertyYouWantToExtend { get; set; } 
} 

Mã này đi trong một file riêng biệt so với cái được tạo ra hoặc bạn sẽ mất nó, quá, tất nhiên.

Sửa

Để đối phó với những ý kiến ​​dưới đây, tôi tin rằng bạn có hai câu hỏi. Câu hỏi ban đầu của bạn được trả lời bằng cách sử dụng MetadataTypeAttribute và, đối với câu hỏi thứ hai, có lẽ bạn nên mở một câu hỏi khác.

+1

Wow, đó là một tính năng thực sự thú vị! Cảm ơn! –

+0

Không sao cả. –

+0

Ngoại trừ thực tế là nó không hoạt động. Bộ điều khiển của tôi vẫn bị treo khi nhận dữ liệu HTML. Bạn có thể giúp tôi với điều này? Tôi đã đăng mã điều khiển trong bài đăng gốc. –

0

Chú thích của bạn bên trong tệp được tạo tự động sẽ luôn biến mất khi mô hình được thay đổi trong trình thiết kế.

Bạn có thể mở rộng lớp của mình bằng các thuộc tính tùy chỉnh bằng cách viết một phần lớp và lưu trữ nó trong một tệp riêng biệt.

public partial class MyClass 
{ 
    [AllowHtml] 
    public int MyAnnotatedProperty 
    { 
     get { ... } 
     set { ... } 
    } 
} 

Nếu bạn muốn chú thích thuộc tính được tạo tự động, hãy xem James D'Angelo's answer ở trên.

+2

Tuy nhiên, ông có tài sản trong các tập tin khác này. Tôi nghĩ bạn cần phải sử dụng thuộc tính Siêu dữ liệu cho vấn đề của mình – gdoron

+0

Điều này có tự động được đưa vào mô hình tổng thể không? Và nó sẽ được hiển thị ở đó? –

+0

Bạn có ý là trong nhà thiết kế edmx không? Không, nó sẽ không hiển thị ở đó. –

0

Một giải pháp khả thi là sử dụng một Metadata và chú thích mẫu dữ liệu như mô tả trong here

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