【发布时间】:2014-09-18 08:30:44
【问题描述】:
假设我有以下实体类:
public class Customer {
public int Id { get; set; }
public virtual ICollection<Order> Orders { get; set; }
}
public class Order {
public int Id { get; set; }
public virtual Customer Customer { get; set; }
}
在 Entity Framework 6 流畅的代码优先映射中应该如何映射?我想明确映射,而不是依赖自动映射约定。
选项 1
只需映射两个类的本地属性。这就是我在 Fluent NHibernate 中的做法。
public class CustomerMap : EntityTypeConfiguration<Customer> {
public CustomerMap() {
HasMany(x => x.Orders);
}
}
public class OrderMap : EntityTypeConfiguration<Order> {
public OrderMap() {
HasRequired(x => x.Customer);
}
}
选项 2
在两个类中映射关系的两边。
public class CustomerMap : EntityTypeConfiguration<Customer> {
public CustomerMap() {
HasMany(x => x.Orders).WithRequired(x => x.Customer);
}
}
public class OrderMap : EntityTypeConfiguration<Order> {
public OrderMap() {
HasRequired(x => x.Customer).WithMany(x => x.Orders);
}
}
选项 3
映射关系的两侧,但仅在其中一个类中。代码与选项 2 类似,只是两个构造函数之一为空。
这些选项之间有什么区别吗?如果是,还请解释为什么我应该或不应该使用特定选项。
【问题讨论】:
-
EF 会自动检测这两个类之间的一对多关系,你不需要定义额外的映射。
-
@Masoud 在我不想依赖约定的问题中添加了注释。
标签: c# .net entity-framework ef-code-first entity-framework-6