我正在使用 Entity Framework CTP5(代码优先)并且我有两个类:
public class Order
{
public int Id {get;set;}
public decimal SomeOtherProperty1 {get;set;}
//navigation property
public virtual ICollection<OrderLine> OrderLines { get; set; }
}
和
public class OrderLine
{
public int Id {get;set;}
public int OrderId {get;set;}
public decimal SomeOtherProperty2 {get;set;}
//navigation property
public virtual Order Order { get; set; }
}
我有以下 OrderLine 类的配置类:
public partial class OrderLineMap : EntityTypeConfiguration<OrderLine>
{
public OrderLineMap()
{
this.HasKey(ol=> ol.Id);
this.HasRequired(ol=> ol.Order)
.WithMany(o => o.OrderLines)
.HasForeignKey(ol=> ol.OrderId);
}
}
目前,如果您创建一个 'OrderLine' 实例,您必须指定一个 'Order' 实例。
问题:如何使 ol.Order 属性可选(在某些情况下为 null)?是否可以?
最佳答案
OrderLine 现在需要 Order 的原因是因为您使用了 HasRequired()
在您流畅的 API 代码中配置关联。我们只需要将其更改为 HasOptional
如以下代码所示:
this.HasOptional(ol => ol.Order)
.WithMany(o => o.OrderLines)
.HasForeignKey(ol => ol.OrderId);
这将基本上使 OrderLines.OrderId 列在数据库中为 (INT, NULL),以便 OrderLine 记录独立。我们还需要通过 make
OrderId
在对象模型中反射(reflect)这种变化。在 OrderLine 类上可为 null:public class OrderLine
{
public int Id { get; set; }
public int? OrderId { get; set; }
public decimal SomeOtherProperty2 { get; set; }
public virtual Order Order { get; set; }
}
现在,您可以保存 OrderLine 而无需为其指定 Order。
关于asp.net - Entity Framework CTP5,代码优先。可选导航属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4561079/