Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架6一对多关系添加和更新结果异常_C#_Entity Framework_Entity Framework 6 - Fatal编程技术网

C# 实体框架6一对多关系添加和更新结果异常

C# 实体框架6一对多关系添加和更新结果异常,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,我有两门课: public class Present : ITripleStarModelBase { [Key] public int Id { get; set; } public virtual ICollection<PresentPhoto> PresentPhotos { get; set; } [MaxLength(100)] [Index(IsUnique = true)] [Required] [Ch

我有两门课:

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; }
}
我正在尝试将带有照片的当前对象添加到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标记为已添加,但也将obj.PresentPhotos中的每个PresentPhoto标记为已添加。这就是EF的工作方式。这意味着现在唯一要做的就是从非新照片中删除添加的状态:

foreach(var photo in obj.PresentPhotos
                        .Where(p => p.Id > 0)
                        .ToList())
{
    db.Entry(photo).State = EntityState.Detached; // or Unchanged
}

现在SaveChanges将一次性保存新礼物和新照片。您不再需要事务管理。

该错误是内部的最大长度异常。但信息是这样的。我不知道为什么我们不能访问其中的有效例外。并获取validationErrorType、error类、error字段等值

他们正在写一个很大的项目。但他们隐藏了所有的例外。我不敢相信这种业余爱好

foreach(var photo in obj.PresentPhotos
                        .Where(p => p.Id > 0)
                        .ToList())
{
    db.Entry(photo).State = EntityState.Detached; // or Unchanged
}