簡體   English   中英

實體框架6一對多關系添加和更新結果異常

[英]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添加,但每個PresentPhotoobj.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM