这与问题here和here类似,但这些问题陈旧且没有好的答案。
假设我有以下课程:
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 NOT在我当前的db上下文中创建HairCutStyle表?但与此同时,我想在CustomerHairCutPreference表中存储一个值,该值是对其他地方存储的HairCutStyle数据的引用。排序的“虚拟”外键,不受实际数据库FK约束的约束。
答案 0 :(得分:22)
在CustomerHairCutPreference
中为HairCutSytleID
添加一个属性,然后使用[NotMapped]
属性上的HairCutStyle
属性。但请注意,您将负责确保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
实体框架的映射,如果您有多个链接到它的类,这可能很有用。
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Ignore<HairCutStyle>();
}
答案 1 :(得分:6)
有三件事需要确保:
DbSet<HairCutStyle>
派生类DbContext
HairCutStyle
覆盖OnModelCreating
HairCutStyle
属性标记您的NotMapped
媒体资源。