c# - Entity Framework 代码优先 : How to ignore classes

标签 c# entity-framework poco dbcontext

这类似于问题herehere ,但这些都是旧的,没有好的答案。

假设我有以下类(class):

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; }
}

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

如何告诉 EF 不要在我当前的数据库上下文中创建 HairCutStyle 表?但与此同时,我想在 CustomerHairCutPreference 表中存储一个值,该值是对存储在别处的 HairCutStyle 数据的引用。一种“虚拟”外键,不受实际数据库 FK 约束的约束。

最佳答案

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

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

   [NotMapped]
   public HairCutStyle HairCutStyle { get; set; }
}

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

protected override void OnModelCreating(DbModelBuilder modelBuilder) {
    modelBuilder.Ignore<HairCutStyle>();
}

关于c# - Entity Framework 代码优先 : How to ignore classes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30643553/

相关文章:

entity-framework-4 - Entity Framework POCO T4 有时会创建一个 EntityCollection 有时会创建一个 FixUpCollection

c# - 在 C# 中,是否可以循环遍历相同基类型的多个集合?

c# - 使用通用接口(interface)创建工厂

c# - MSTest VS2010 - DeploymentItem 将文件复制到不同机器上的不同位置

c# - 我可以将这段代码简化为一行吗

c# - 使用 DTO 和 POCO 对象时处理导航属性的最佳做法是什么?

c# - 具有非标准命名约定的数据库的 POCO 别名

c# - LINQ 返回列表中与另一个列表中的任何名称(字符串)匹配的项目

c# - 如何在 Entity Framework 中没有 saveChanges 的情况下获取插入实体的 ID?

c# - Entity Framework 添加许多实体,嵌套属性已经存在