将数据插入数据库中的两个表,并具有一到多关系的ASP.NET EF

发布于 2025-02-08 05:25:20 字数 1971 浏览 1 评论 0原文

我有一个发布

public class Post
    {
        public int Id {get; set;}
        public string Title { get; set; }
        public string Content { get; set; }
        public List<string> GalleryPaths { get; set; }
    }

图像 class:

    public class Image
    {
        public int Id { get; set; }
        public string Path { get; set; }
        public int PostId { get; set; }
        [ForeignKey("PostId")]
        public virtual Post Post { get; set; }
    }

现在我想在我的帖子表中添加post ; 到我的图像表。

我的方法是:

public void Create(PostAddRequest model)
        {
            List<string> galleryImageFiles = new List<string>();
            if (model.GalleryImages != null)
            {
                foreach (var item in model.GalleryImages)
                {
                    galleryImageFiles.Add("/Content/img/uploads/" + Guid.NewGuid() + "_" + model.FeaturedImage.FileName);
                    item.SaveAs(System.Web.HttpContext.Current.Server.MapPath(galleryImageFiles.Last()));
                }
            }
            var post = new Post()
            {
                Title = model.Title,
                Content = model.Content,
            };
            model.FeaturedImage.SaveAs(System.Web.HttpContext.Current.Server.MapPath(featuredImageFile));
            _unitOfWork.PostRepository.AddPost(post);
            _unitOfWork.SaveChanges();

            List<Image> gallery = new List<Image>();
            foreach (var item in galleryImageFiles)
            {
                gallery.Add(new Image()
                {
                    Path = item,
                    PostId = post.Id
                });
            }
            _unitOfWork.ImageRepository.AddGallery(gallery);
            _unitOfWork.SaveChanges();
}

我对EF有些新手,想知道是否有更有效的方法可以这样做,甚至消除了imageerepository的需求

I have a Post class

public class Post
    {
        public int Id {get; set;}
        public string Title { get; set; }
        public string Content { get; set; }
        public List<string> GalleryPaths { get; set; }
    }

And an Image class:

    public class Image
    {
        public int Id { get; set; }
        public string Path { get; set; }
        public int PostId { get; set; }
        [ForeignKey("PostId")]
        public virtual Post Post { get; set; }
    }

Now I want to add a Post to my Posts table and a List<Image> to my Images table.

My approach:

public void Create(PostAddRequest model)
        {
            List<string> galleryImageFiles = new List<string>();
            if (model.GalleryImages != null)
            {
                foreach (var item in model.GalleryImages)
                {
                    galleryImageFiles.Add("/Content/img/uploads/" + Guid.NewGuid() + "_" + model.FeaturedImage.FileName);
                    item.SaveAs(System.Web.HttpContext.Current.Server.MapPath(galleryImageFiles.Last()));
                }
            }
            var post = new Post()
            {
                Title = model.Title,
                Content = model.Content,
            };
            model.FeaturedImage.SaveAs(System.Web.HttpContext.Current.Server.MapPath(featuredImageFile));
            _unitOfWork.PostRepository.AddPost(post);
            _unitOfWork.SaveChanges();

            List<Image> gallery = new List<Image>();
            foreach (var item in galleryImageFiles)
            {
                gallery.Add(new Image()
                {
                    Path = item,
                    PostId = post.Id
                });
            }
            _unitOfWork.ImageRepository.AddGallery(gallery);
            _unitOfWork.SaveChanges();
}

I'm kinda new to EF and was wondering if there was a more efficient way of doing this, or even removing the need of a ImageRepository?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

傲世九天 2025-02-15 05:25:20

我发现这个答案真的很有帮助

发布我自己的解决方案:

public void Create(PostAddRequest model)
        {
            List<string> galleryImageFiles = new List<string>();
      
            if (model.GalleryImages != null)
            {
                foreach (var item in model.GalleryImages)
                {
                    galleryImageFiles.Add("/Content/img/uploads/" + Guid.NewGuid() + "_" + model.FeaturedImage.FileName);
                    item.SaveAs(System.Web.HttpContext.Current.Server.MapPath(galleryImageFiles.Last()));
                }
            }
            var post = new Post()
            {
                Title = model.Title,
                Content = model.Content,
                GalleryPaths = new List<Image>()
            };

            _unitOfWork.PostRepository.AddPost(post);

            foreach (var item in galleryImageFiles)
            {
                post.GalleryPaths.Add(new Image()
                {
                    Path = item,
                    PostId = post.Id
                });
            }
            _unitOfWork.SaveChanges();
        }

I found this answer really helpful

Posting my own solution:

public void Create(PostAddRequest model)
        {
            List<string> galleryImageFiles = new List<string>();
      
            if (model.GalleryImages != null)
            {
                foreach (var item in model.GalleryImages)
                {
                    galleryImageFiles.Add("/Content/img/uploads/" + Guid.NewGuid() + "_" + model.FeaturedImage.FileName);
                    item.SaveAs(System.Web.HttpContext.Current.Server.MapPath(galleryImageFiles.Last()));
                }
            }
            var post = new Post()
            {
                Title = model.Title,
                Content = model.Content,
                GalleryPaths = new List<Image>()
            };

            _unitOfWork.PostRepository.AddPost(post);

            foreach (var item in galleryImageFiles)
            {
                post.GalleryPaths.Add(new Image()
                {
                    Path = item,
                    PostId = post.Id
                });
            }
            _unitOfWork.SaveChanges();
        }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文