我正在使用实体框架 CTP5(代码优先)并且我有两个类:
public class Order
{
public int Id {get;set;}
public decimal SomeOtherProperty1 {get;set;}
//navigation property
public virtual ICollection<OrderLine> OrderLines { get; set; }
}
and
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
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; }
}
现在,您可以保存 OrderLines,而无需为其指定订单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)