Entity Framework 代码优先:如何忽略 类
Entity Framework code first: How to ignore classes
这与问题 here and here 类似,但这些都是旧问题,没有好的答案。
假设我有以下 classes:
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 数据存储在另一个数据库的 table 中(我是从 Paul Mitchell 自己那里得到的)。我想将 HairCutStyle class 用作 POCO class - 我将在代码中使用它来表示理发样式,但我不需要 read/write 我的数据库中的信息. (假设我有一个单独的服务层,可以从其他数据库为这些 classes 填充数据。)
如何告诉 EF 不要在我当前的数据库上下文中创建 HairCutStyle table?但与此同时,我想在 CustomerHairCutPreference table 中存储一个值,该值是对存储在别处的 HairCutStyle 数据的引用。 "virtual" 某种外键,不受实际数据库 FK 约束的约束。
在 CustomerHairCutPreference
中为 HairCutSytleID
添加一个 属性,然后在 HairCutStyle
属性 上使用 [NotMapped]
属性。但是请注意,您将负责确保 HairCutStyle
和 HairCutStyleID
保持同步。
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 映射之外,如果您有多个 类 link,这可能会很有用
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Ignore<HairCutStyle>();
}
要确保三件事:
- 确保您没有在
DbContext
派生的 class 中公开 DbSet<HairCutStyle>
- 确保您在
OnModelCreating
覆盖 中没有提及 HairCutStyle
- 使用
NotMapped
属性标记您的 HairCutStyle
属性。
这与问题 here and here 类似,但这些都是旧问题,没有好的答案。
假设我有以下 classes:
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 数据存储在另一个数据库的 table 中(我是从 Paul Mitchell 自己那里得到的)。我想将 HairCutStyle class 用作 POCO class - 我将在代码中使用它来表示理发样式,但我不需要 read/write 我的数据库中的信息. (假设我有一个单独的服务层,可以从其他数据库为这些 classes 填充数据。)
如何告诉 EF 不要在我当前的数据库上下文中创建 HairCutStyle table?但与此同时,我想在 CustomerHairCutPreference table 中存储一个值,该值是对存储在别处的 HairCutStyle 数据的引用。 "virtual" 某种外键,不受实际数据库 FK 约束的约束。
在 CustomerHairCutPreference
中为 HairCutSytleID
添加一个 属性,然后在 HairCutStyle
属性 上使用 [NotMapped]
属性。但是请注意,您将负责确保 HairCutStyle
和 HairCutStyleID
保持同步。
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 映射之外,如果您有多个 类 link,这可能会很有用
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Ignore<HairCutStyle>();
}
要确保三件事:
- 确保您没有在
DbContext
派生的 class 中公开 - 确保您在
OnModelCreating
覆盖 中没有提及 - 使用
NotMapped
属性标记您的HairCutStyle
属性。
DbSet<HairCutStyle>
HairCutStyle