Переопределить или скрыть свойство в частичном классе - PullRequest
2 голосов
/ 16 августа 2011

Я уже немного перечитал и думаю, что следующее невыполнимо, но я хотел бы получить подтверждение экспертов, если это возможно, и, возможно, совет по поводу «лучшего» обходного пути.

Во всехавтоматически сгенерированные классы linq-to-sql Я заканчиваю тем, что удваиваю все свойства, чтобы выполнять проверки значений, поскольку они установлены, скажем, у меня есть класс Person со свойством Name, на котором я в итоге выполняю:

public partial class Person
{
    public string Name
    {
        get { return this._Name; }
        set
        {
            if (!string.IsNullOrEmpty(value))
            {
                value = value.trim();
                this._Name = value.Substring(0, Math.Min(value.Length, 200));
            }
            else
                throw new InvalidOperationException("Person name cannot be blank");
        }
    }
}

Простая проверка, чтобы гарантировать, что при сохранении в базе данных имя не будет превышать максимальной длины.

Это означает, что в итоге я удваиваюсь почти на каждом отдельном свойстве из автоматически сгенерированногокласс, и это создает большой беспорядок, потому что в итоге все они названы чем-то похожими.

Я попытался добавить слой поверх частичных классов, создав собственное представление объектов, но столкнулся с проблемами при создании экземпляров классовкоторый зависел один от другого ... Скажем, у человека есть компания, вы инстанцируете человека и его компанию, которая инстаназначает людей для компании, которая реанимирует компании и т.д. ...

Есть ли какой-нибудь "хороший" способ сделать то, что я пытаюсь сделать с частичными классами?Если нет, то какие альтернативы работают лучше всего?Может быть, наследовать каждый частичный класс и переопределять свойства?Использование событий OnChange для выполнения проверок?

Ответы [ 2 ]

2 голосов
/ 16 августа 2011

Рекомендованные подходы изложены в блоге ScottGu здесь: http://weblogs.asp.net/scottgu/archive/2007/07/11/linq-to-sql-part-4-updating-our-database.aspx

и снова здесь

http://geekswithblogs.net/AzamSharp/archive/2008/03/30/120875.aspx

Кроме того, вам может потребоваться перейти от L2S к Entity Framework, которая обеспечивает более надежную поддержку проверки.

1 голос
/ 16 августа 2011

Мне кажется, что вы пытаетесь заставить linq to sql делать то, чего никогда не собирались делать. Когда я сталкиваюсь с подобными ситуациями, я начинаю искать инструмент / библиотеку / форму и т. Д., Которые лучше подходят для того, что я пытаюсь выполнить

...