Частичный класс ASP.Net (3.5) MVC для проверки правил

У меня 2 проекта. Проект данных, содержащий мою базу данных и мою модель Entity Framework. У меня есть таблица под названием «Пользователь», а затем сгенерированный класс EF для пользователя.

Я пытаюсь добавить частичный класс:

using System;
using System.Collections.Generic;
using System.Data.Linq;
using System.Linq;
using System.Text;

namespace Data
{
    public partial class user
    {

        public bool isValid
        {
            get {
                return (GetRuleViolations().Count()==0);
            }
        }

        public IEnumerable<RuleViolation> GetRuleViolations()
        {
            yield break;
        }



        partialvoid OnValidate(ChangeAction action)
        {
            if (isValid)
                throw new ApplicationException("Rule violation prevents saving");
        }
    }

    public class RuleViolation
    {
        public string ErrorMessage { get; private set; }
        public string PropertyName { get; private set; }

        public RuleViolation (string errorMessage)
        {
            ErrorMessage = errorMessage;
        }

        public RuleViolation(string errorMessage, string propertyName)
        {
            ErrorMessage = errorMessage;
            PropertyName = propertyName;
        }
    }
}

Это соответствует примеру MVC 1.0 NerdDinner. Однако я получаю ошибку времени разработки в методе OnValidate:

    partial void OnValidate(ChangeAction action)
    {
        if (isValid)
            throw new ApplicationException("Rule violation prevents saving");
    }

Не найдено определяющее объявление для имплементации объявления частичного метода 'void OnValidate (ChangeAction action)'

Что я делаю неправильно?


person Craig    schedule 04.01.2011    source источник
comment
Я до сих пор не уверен, что делаю здесь не так.   -  person Craig    schedule 07.01.2011


Ответы (1)


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

В этом файле вы должны указать, что может быть частичный метод под названием OnValidate.

public partial class user
{
    partial void OnValidate(ChangeAction action);
}

Некоторая деталь: частичный метод должен иметь где-то указанную подпись. После определения подписи можно указать необязательную реализацию. Прочтите http://msdn.microsoft.com/en-us/library/wa80x488.aspx для получения дополнительной информации.

person WilliamB    schedule 04.01.2011
comment
Спасибо. Исходный файл класса создается и помечается как частичный. Однако у него нет метода OnValidate. Однако класс / метод создается, когда я создаю свою модель Entity Framework. Я не думаю, что буду изменять его и добавлять метод, не так ли? Я думал, что идея заключалась в том, что мой несгенерированный код будет в моем настраиваемом файле частичного класса, а исходный (сгенерированный) класс не будет затронут. В следующий раз, когда я создам модель EF, я потеряю изменения. - person Craig; 04.01.2011
comment
Проблема заключалась в том, что я использовал частичный объект Entity Framework. В книге используется объект linq to SQL. - person Craig; 08.01.2011
comment
Ничто не мешает вам создать еще одно частичное определение для вашего класса, а также создать его с помощью EF. В этом случае у вас будет сгенерированный файл Data.cs (ваша основная реализация) и Data.Validation.cs, в котором вы можете определить свои сигнатуры метода OnValidate. - person WilliamB; 10.01.2011