0
我有一个具有许多不同属性的分离对象。其中一些属性需要在某个时刻“附加”,以便EF不会尝试将它们插入到数据库中。将独立对象添加到EF 6
public partial class Load
{
public virtual int Id {get;set;}
[Required]
public virtual int CustomerId { get; set; }
[ForeignKey("CustomerId")]
public virtual Customer Customer { get; set; }
[Required]
public virtual long CreatedByApplicationUserId { get; set; }
[ForeignKey("CreatedByApplicationUserId")]
public virtual ApplicationUser CreatedByApplicationUser { get; set; }
public virtual long? ModifiedByApplicationUserId { get; set; }
[ForeignKey("ModifiedByApplicationUserId")]
public virtual ApplicationUser ModifiedByApplicationUser { get; set; }
public virtual long? CoveredByApplicationUserId { get; set; }
[ForeignKey("CoveredByApplicationUserId")]
public virtual ApplicationUser CoveredByApplicationUser { get; set; }
public virtual bool IsNetworkLoad { get; set; }
public virtual bool IsExport { get; set; }
public virtual bool CanTrackLoad { get; set; }
[Required]
public virtual DateTime CreatedDateTime { get; set; }
public virtual DateTime? ModifiedDateTime { get; set; }
public virtual string BillingReferenceNumber { get; set; }
[Required]
public virtual int LoadStatusId { get; set; }
[ForeignKey("LoadStatusId")]
public virtual LoadStatus LoadStatus { get; set; }
public virtual Freight Freight { get; set; }
public virtual ICollection<LoadOrigin> LoadOrigins { get; set; }
public virtual ICollection<LoadDestination> LoadDestinations { get; set; }
public virtual ICollection<LoadNote> LoadNotes { get; set; }
public virtual ICollection<LoadCarrier> LoadCarriers { get; set; }
}
以我的属性LoadCarries为例。 LoadCarries有一个属性载体,从数据库中填充而没有跟踪。
public partial class LoadCarrier
{
public virtual int Id {get;set;}
public virtual bool IsDispatched { get; set; }
public virtual bool IsPrimary { get; set; }
[MaxLength(25)]
public virtual string CarrierProNumber { get; set; }
[MaxLength(1000)]
public virtual string RCNotes { get; set; }
[Required]
public virtual int CarrierId { get; set; }
[ForeignKey("CarrierId")]
public virtual Carrier Carrier { get; set; }
[MaxLength(50)]
[Required]
public virtual string Dispatcher { get; set; }
public virtual long LoadId { get; set; }
[ForeignKey("LoadId")]
public virtual Load Load { get; set; }
public virtual LoadDriver LoadDriver { get; set; }
}
一旦我有我的对象正确填充,我尝试保存到分贝。由于这些对象都被分离,所以保存失败,因为我对Carriers对象的成员有一个唯一的约束,因为EF不正确地尝试插入一个已经存在于db中的对象。
public virtual int Create(T entity, long userId)
{
if (entity == null)
{
throw new ArgumentNullException("entity");
}
dbSet.Add(entity);
return context.SaveChanges(userId);
}
我曾多次试图改变运营商的国家反对“不变”,但我得到一个重复的主键例外。我也尝试将Load对象添加到上下文中,然后将Carrier对象设置为我明确从数据库中提取的对象。有没有办法让我可以正确地附加这个分离的对象?
我也试过这种方法。当我使用dbSet.Add(实体)EF从数据库填充LoadCarrier但仍尝试插入载体表。问题可能在于LoadCarrier是应该插入的新对象,但不应插入其成员Carrier,并且LoadCarrier应向Carrier提供外键。 – JasonlPrice
正如我所说的,您不要设置导航属性,而是设置外键值。因此不会发生插入。 –
这就是我所说的我尝试过的。 http://snag.gy/YO9TE.jpg。 您可以看到Carrier对象为空,但设置了外键CarrierId。 – JasonlPrice