实体框架代码优先:如何忽略类

Chr*_*ris 12 c# entity-framework poco dbcontext

这与此处此处的问题类似,但这些问题都是陈旧且没有好的答案.

假设我有以下课程:

class HairCutStyle { 
   public int ID { get; set; }
   public string Name { get; set; }
}

class CustomerHairCutPreference {
   public int ID { get; set; }
   public Customer Customer { get; set; }
   public HairCutStyle HairCutStyle { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

假设我的HairCutStyle数据存储在另一个数据库的表中(我是从Paul Mitchell自己获得的).我想将HairCutStyle类用作POCO类 - 我将在代码中使用它来表示剪发样式,但我不需要在我的数据库中读/写该信息.(假设我有一个单独的服务层,可以从其他数据库填充这些类的数据.)

如何告诉EF NOT在我当前的db上下文中创建HairCutStyle表?但与此同时,我想在CustomerHairCutPreference表中存储一个值,该值是对其他地方存储的HairCutStyle数据的引用.排序的"虚拟"外键,不受实际数据库FK约束的约束.

Cla*_*ies 23

CustomerHairCutPreferencefor中添加属性,HairCutSytleID然后在[NotMapped]属性上使用该属性HairCutStyle.但请注意,您将负责确保HairCutStyleHairCutStyleID保持同步.

class CustomerHairCutPreference {
   public int ID { get; set; }
   public Customer Customer { get; set; }
   public int HairCutStyleID {get; set; }

   [NotMapped]
   public HairCutStyle HairCutStyle { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用FluentAPI HairCutStyle完全排除Entity Framework的映射,如果您有多个链接到它的类,这可能很有用.

protected override void OnModelCreating(DbModelBuilder modelBuilder) {
    modelBuilder.Ignore<HairCutStyle>();
}
Run Code Online (Sandbox Code Playgroud)


Jur*_*eri 7

有三件事需要确保:

  1. 确保您没有DbSet<HairCutStyle>在您的DbContext派生类中公开
  2. 确保HairCutStyleOnModelCreating覆盖中没有提及任何内容
  3. HairCutStyle使用NotMapped属性标记您的属性.