簡體   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