При использовании Entity Framework Code First допустимо ли добавлять свойства в класс, которые вообще не отображаются в таблице базы данных? - PullRequest
2 голосов
/ 21 октября 2011

Как и в заголовке, могу ли я добавить дополнительное свойство к одному из моих POCO, которое не сопоставляется со столбцом БД (база данных была создана первой) и не будет сохранено.Это свойство будет использоваться только внутри приложения, и его не нужно сохранять.

Существуют ли какие-либо дополнительные меры для достижения этой цели, помимо определения свойства как обычного?

Ответы [ 2 ]

4 голосов
/ 21 октября 2011

Да, вы абсолютно можете это сделать.Вот пример из класса конфигурации, который у меня есть:

public class ForCommentEntities:EntityTypeConfiguration<Comment> {
    public ForCommentEntities(String schemaName) {
        this.HasRequired(e => e.SystemUser)
            .WithMany()
            .Map(m => m.MapKey("SystemUserID"));
        this.Ignore(e => e.Remarks);
        this.ToTable("Comment", schemaName);
    }
}

Важной частью является вызов this.Ignore.Он принимает лямбда-выражение к одному из свойств вашего класса.Это является частью того, что делает EFCF великолепным (IMO), поскольку он скрывает детали конфигурации от ваших POCO.

Класс конфигурации будет использоваться в вашем Context:

protected override void OnModelCreating(DbModelBuilder modelBuilder) {
    base.OnModelCreating(modelBuilder);

    var schemaName = Properties.Settings.Default.SchemaName;
    modelBuilder.Configurations
        .Add(new Configuration.ForCommentEntities(schemaName))
        // ...other configuration options here
    ;
}
1 голос
/ 21 октября 2011

Приятной особенностью Code First и POCO является то, что теперь вы можете иметь бизнес-объекты, которые используются EF без необходимости в картографе (например, AutoMapper или ваш собственный). Также означает, что вам не нужно украшать ваши объекты атрибутами EF и многим другим (отсюда и ответ Юка выше). Однако дополнительным преимуществом является, да, возможность добавлять методы или свойства к объекту. Примером может служить коллекция (например, адреса), и вы хотели бы иметь отсортированную или отфильтрованную проекцию. Другой способ - проверка бизнес-правил перед вызовом SaveChange (). Как мы все знаем, возможности безграничны, но дело в том, что вы можете и должны использовать эти объекты в качестве бизнес-объектов, которые заполняются вашим уровнем данных.

...