0

我有一个问题,当我添加一个新实体SessionImages,然后添加另一个(通过上传)时,它会翻倍。例如 :

  1. 添加图像: 在此处输入图像描述

  2. 之后添加另一个: 在此处输入图像描述

这是我的控制器代码:

[HttpPost]
public ActionResult SessionImages(FormCollection collection)
{
    int SessionID = Convert.ToInt32(collection[0]);
    Sessions SessionModel = sessionsRepo.GetSessionById(SessionID);
    bool uploadSucceded = Utility.Utility.UploadImages(this, Request.Files, Server.MapPath(Path.Combine("~/Photos/Sessions", SessionModel.Name)));
    for (int i = 0; i < Request.Files.Count; i++)
    {
        if (Request.Files[i].ContentLength == 0)
        {
            continue;
        }

        SessionImages ImageModel = new SessionImages
        {
            Name = Request.Files[i].FileName,
            Path = Path.Combine("~/Photos/Sessions/", SessionModel.Name, "actual", Request.Files[i].FileName),
            Session = SessionModel,
            SessionID = SessionID
        };
        sessionImagesRepo.Add(SessionModel, ImageModel);
    }            
    return RedirectToAction("SessionImages",SessionModel.ID);
}

这是sessionImagesRepo.Add方法:

public SessionImages Add(Sessions SessionModel, SessionImages ImageModel)
{
    try
    {
        context.Entry(ImageModel).State = System.Data.EntityState.Added;
        SessionModel.PhotosCount = SessionModel.Images.Count;
        context.Entry(SessionModel).State = System.Data.EntityState.Modified;                
        context.SaveChanges();
    }
    catch
    {
        return null;
    }
    return ImageModel;
}

这是我的实体:

namespace FP.Domain.Entities
{
    public class Sessions
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public DateTime Date { get; set; }
        public int PhotosCount { get; set; }
        public string CoverPhoto { get; set; }
        public List<SessionImages> Images { get; set; }
    }
}


namespace FP.Domain.Entities
{
    public class SessionImages
    {
        public int ImageID { get; set; }
        public string Name { get; set; }
        public string Path { get; set; }
        public int SessionID { get; set; }
        public Sessions Session { get; set; }
    }
}

这是配置:

namespace FP.Domain.Configurations
{
    public class SessionsConfig : EntityTypeConfiguration<Sessions>
    {
        public SessionsConfig()
        {
            ToTable("Sessions");
            Property(p => p.Name).IsRequired();
            Property(p => p.PhotosCount).IsRequired();
            Property(p => p.CoverPhoto).IsRequired();
            Property(p => p.Date).HasColumnType("date");
        }
    }
}


namespace FP.Domain.Configurations
{
    public class SessionImagesConfig : EntityTypeConfiguration<SessionImages>
    {
        public SessionImagesConfig()
        {
            ToTable("SessionImages");
            HasKey(e => e.ImageID);
            Property(p => p.Path).IsRequired();
            HasRequired(i => i.Session)
                .WithMany(s => s.Images)
                .HasForeignKey(i => i.SessionID);
        }
    }
}
4

2 回答 2

0

尝试像这样更改存储库方法:

public SessionImages Add(Sessions SessionModel, SessionImages ImageModel)
{
    try
    {
        SessionModel.Images.Add(ImageModel);
        SessionModel.PhotosCount = SessionModel.Images.Count;
        context.Entry(SessionModel).State = System.Data.EntityState.Modified;                
        context.SaveChanges();
    }
    catch
    {
        return null;
    }
    return ImageModel;
}

并在操作中删除我评论过的行:

    SessionImages ImageModel = new SessionImages
    {
        Name = Request.Files[i].FileName,
        Path = Path.Combine("~/Photos/Sessions/", SessionModel.Name, "actual", Request.Files[i].FileName),
        //Session = SessionModel,
        SessionID = SessionID
    };
于 2013-04-08T15:55:16.950 回答
0

我建议你放弃这些行,如果你能解决它(我可以在 中看到这一点count)......

context.Entry(ImageModel).State = System.Data.EntityState.Added;
SessionModel.PhotosCount = SessionModel.Images.Count;
context.Entry(SessionModel).State = System.Data.EntityState.Modified;                

这可能就是它的问题所在。我不止一次看到过类似的问题——然后我通常会做相反的事情:

context.Entry(Parent).State = System.Data.EntityState.Unchanged;  

你在那里所做的一切都是为了Count工作。

我可以理解优化的原因,但你在集合中确实有这个数量。我知道如果您不想加载等,这会更快。

我不确定该建议什么 - 但我怀疑这是“罪魁祸首”。

尝试不使用它,在测试时关闭并忽略计数。走着瞧吧。如果是这样,那么考虑如何重新组织一下。

于 2013-04-09T00:33:59.380 回答