[英]Entity Framework 6 One To Many Relationship Add and Update Results Exceptions
我有兩個班:
public class Present : ITripleStarModelBase
{
[Key]
public int Id { get; set; }
public virtual ICollection<PresentPhoto> PresentPhotos { get; set; }
[MaxLength(100)]
[Index(IsUnique = true)]
[Required]
[Changable]
public string Name { get; set; }
[MaxLength(500)]
[Changable]
public string Description { get; set; }
[Changable]
public float Points { get; set; }
public DateTime CreatedAt { get; set; }
[Changable]
public DateTime ModifiedAt { get; set; }
[Changable]
public bool IsActive { get; set; }
}
和
public class PresentPhoto :ITripleStarModelBase
{
[Key]
public int Id { get; set; }
//public int PresentId { get; set; }
//[ForeignKey("PresentId")]
//public virtual Present Present { get; set; }
public int PresentId { get; set; }
[ForeignKey("PresentId")]
public virtual Present Present { get; set; }
[MaxLength(50)]
[Required]
public string PhotoName { get; set; }
public int Size { get; set; }
public DateTime CreatedAt { get; set; }
public DateTime ModifiedAt { get; set; }
}
我正在嘗試將帶有照片的當前對象添加到db,如:
obj = RequestHelper.getRequestBody<Present>();
using (var dbContextTransaction = db.Database.BeginTransaction())
{
try
{
obj.IsActive = true;
db.Presents.Add(obj);
db.SaveChanges();
foreach (var item in obj.PresentPhotos)
{
if (item.Id == 0)
{
item.PresentId = obj.Id;
db.PresentPhotos.Add(item);
}
}
db.SaveChanges();
dbContextTransaction.Commit();
}
catch (Exception ex2)
{
dbContextTransaction.Rollback();
throw ex2;
}
}
這總是結果
無法將[]索引應用於System.Collections.Generic.IEnumerable類型的表達式
db.saveChanges()方法的秒驗證錯誤。 我嘗試更新禮物和照片我得到同樣的錯誤。
我不承認這個例外,但無論如何你最好這樣做。
這條線
db.Presents.Add(obj);
...標記obj
添加,但每個PresentPhoto
在obj.PresentPhotos
。 這就是EF的工作方式。 這意味着現在唯一要做的就是從非新照片中刪除已Added
狀態:
foreach(var photo in obj.PresentPhotos
.Where(p => p.Id > 0)
.ToList())
{
db.Entry(photo).State = EntityState.Detached; // or Unchanged
}
現在SaveChanges
將一次性保存新的Present
和新照片。 您不再需要事務管理。
錯誤是里面的最大長度異常。 但是信息就是這樣。 我不知道為什么我們不能在其中訪問一個valiadtion異常。 並獲取validationErrorType,錯誤類,錯誤字段等值。
他們正在寫一個非常大的項目。 但是他們隱藏了所有例外。 我無法相信這種業余愛好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.