Что я должен использовать для Entity Framework Entity Partial Classes? - PullRequest
2 голосов
/ 01 октября 2011

Сначала я работаю с базой данных EF 4.1. Мне было интересно, для каких вещей я могу использовать частичные классы сущностей. Какие бы примеры возможных функций я мог бы добавить к частичным классам. Я просто пытаюсь понять, должен ли я сделать свои сущности более способными или я должен искать, чтобы добавить функциональность в другом месте? Есть ли хорошие случаи для вещей, которые я могу захотеть добавить к своим сущностям?

Например, у меня есть сущность, которая имеет различные дочерние свойства с датами начала и окончания. Эти даты не должны пересекаться. Это то, что я должен навязать родительской сущности?


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


Должен ли я связывать бизнес-логику с сущностями структуры сущностей? Что, если я хочу отойти от EF?

Спасибо

Graeme

Ответы [ 2 ]

1 голос
/ 01 октября 2011

Я использовал его для дополнения моих сгенерированных классов вычисляемыми значениями, когда я бы предпочел, чтобы в БД не было вычисляемых столбцов.

1 голос
/ 01 октября 2011

Атрибуты Validatable Objects и MetadataType используются в частичных классах такими структурами, как, например, MVC.

Вот пример использования атрибута MetadataType:

[MetadataType(typeof(UserMetadata))]
public partial class User
{
    private class UserMetadata
    {
        [DisplayName("User Id")]
        public long UserId
        {
            get;
            set;
        }

        [DisplayName("User Name")]
        public string UserName
        {
            get;
            set;
        }
    }
}

Когда вы используете платформу MVC, любая модель, имеющая эти атрибуты, будет считываться для целей автоматической генерации полей меток для соответствующих дисплеев / редакторов.

Пример использования IValidatableObject

public partial class Apple : IValidatableObject // Assume the Apple class has an IList<Color> property called AvailableColors
{
    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        foreach (var color in this.AvailableColors)
        {
            if (color.Name == "Blue") // No blue apples, ever!
            {
                yield return new ValidationResult("You cannot have blue apples.");
            }
        }
    }
}

MVC подхватит этот IValidatableObject и обеспечит, чтобы любое Apple, которое проходит свой этап проверки, никогда не отображалось синим цветом.

РЕДАКТИРОВАТЬ

В качестве примера вашей проблемы с диапазоном дат используется IValidatableObject:

public partial class ObjectWithAStartAndEndDate : IValidatableObject
{
    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (this.StartDate >= this.EndDate)
        {
            yield return new ValidationResult("Start and End dates cannot overlap.");
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...