繁体   English   中英

当使用Entity Framework Code First时,是否可以向根本没有映射到数据库表的类添加属性?

[英]When using Entity Framework Code First, is it acceptable to add properties to a class that are not mapped to a database table at all?

就像标题中指出的那样,我可以向我的一个POCO中添加一个未映射到DB列(数据库是首先创建的)的额外属性,并且该属性不会保留。 此属性将仅在应用程序内使用,并且永远不需要保留。

除了将属性定义为普通属性之外,是否还需要采取其他措施来实现此目的?

是的,您绝对可以做到。 这是我有一个配置类的示例:

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调用是重要的部分。 它会将lambda表达式带到类的属性之一上。 这是使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
    ;
}

关于Code First和POCO的好处是,您现在可以拥有EF使用的业务对象,而无需使用映射器(例如AutoMapper或您自己的映射器)。 这也意味着不必用EF属性和更多属性来装饰您的对象(因此,Yuck在上面回答了)。 但是,另一个好处是可以向对象添加方法或属性。 一个示例是集合(例如地址),并且您想要一个经过排序或过滤的投影。 另一个方法是在调用SaveChange()之前进行业务规则验证。 众所周知,可能性是无限的,但重点是您可以并且应该将这些对象用作从数据层填充的业务对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM