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
}