[英]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.