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