Модель MVC из файла EDMX - Добавить пользовательские аннотации и оставить их? - PullRequest
5 голосов
/ 31 декабря 2011

Как я могу добавить аннотации / атрибуты к моим классам или методам классов в моей модели, сгенерированным из моего файла Model.edmx? Я спрашиваю об этом потому, что каждый раз, когда я добавляю аннотацию к классу Model.Designer.cs, эта аннотация исчезает при внесении изменений в мой файл Model.edmx через конструктор.

Более конкретно, я ищу способ добавить аннотацию AllowHtml к определенному свойству в одном из моих классов модели и сделать его оставаться там даже после того, как возиться с ним в представлении дизайнера модели .

Вот код контроллера. Свойство Content класса Segment вызывает сбой моего контроллера при заполнении 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");
    }

Ответы [ 3 ]

14 голосов
/ 31 декабря 2011

Вы можете использовать MetadataTypeAttribute для расширения ваших классов:

[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; }
}

Этот код находится в отдельном файле, чем сгенерированный, или вы, конечно, тоже его потеряете.

Редактировать

В ответ на комментарии ниже, я полагаю, у вас есть два вопроса.На ваш первоначальный вопрос вы получите ответ MetadataTypeAttribute, и для второго вам, вероятно, следует открыть еще один вопрос.

0 голосов
/ 01 апреля 2015

Другое возможное решение - использовать шаблон метаданных и аннотаций данных, как описано в здесь

0 голосов
/ 31 декабря 2011

Ваши аннотации внутри автоматически сгенерированного файла всегда будут исчезать при изменении модели в конструкторе.

Вы можете расширить свой класс с помощью пользовательских свойств, написав частичный класс и сохранив его в отдельном файле.

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

Если вы хотите аннотировать автоматически сгенерированное свойство, взгляните на ответ Джеймса Д'Анджело выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...