ASP.NET MVC 使用实体框架上传图像并在数据库上创建记录

Raf*_*lho 4 c# asp.net entity-framework asp.net-web-api

嗯,我正在使用 Xamarin,并且我有一个使用实体框架的 WebAPI。我已经可以将图像从手机发送到网络服务,但我想在数据库上正确创建所有关系的记录,所以基本上我有 3 个表可以工作,如下所示:

  1. 图像
  2. 发生图像
  3. 出现次数

型号图

在我的 WebAPI 中,我有两个控制器,一个用于处理图像上传,另一个用于处理事件。我尝试在创建 OccurenceImage 记录时设置自定义 ID,但它不起作用。

图片上传控制器.cs

[http邮报]
        公共HttpResponseMessage上传图像(字符串图像名称)
        {
            var 结果 = new HttpResponseMessage(HttpStatusCode.OK);
            if (Request.Content.IsMimeMultipartContent())
            {
                Request.Content.LoadIntoBufferAsync().Wait();
                Request.Content.ReadAsMultipartAsync(new MultipartMemoryStreamProvider()).ContinueWith((task) =>
                {
                    MultipartMemoryStreamProvider 提供者 = 任务.Result;
                    foreach(provider.Contents 中的 HttpContent 内容)
                    {
                        Stream 流 = content.ReadAsStreamAsync().Result;
                        图像图像 = Image.FromStream(stream);
                        var testName = content.Headers.ContentDisposition.Name;
                        String filePath = HostingEnvironment.MapPath("~/Images/");
                        字符串 nameImg = imageName + Guid.NewGuid();
                        String fullPath = Path.Combine(filePath, nameImg + ".jpg");
                        图像.保存(完整路径);
                        AddImageToDb(nameImg);
                    }
                });

                返回结果;
            }
            别的
            {
                throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotAcceptable, "此请求格式不正确"));
            }

        }

        私有无效AddImageToDb(字符串图像名称)
        {
            VisitDatabase.Image 图像 = new VisitDatabase.Image()
            {
                urlImage = 图片名称 + ".jpg"
            };

            OccurenceImage 发生图像 = new OccurenceImage()
            {
               id 出现次数 = 18,
               图像=图像,

            };
            db.Image.Add(图像);
            db.OccurenceImage.Add(occurenceImage);
            db.SaveChanges();
        }


OccurrenceController.cs

[响应类型(typeof(ActiveCitizen))]
        公共 IHttpActionResult PostOccurence(ActiveCitizen json)
        {
            公民公民;
            if (!ModelState.IsValid)
            {
                返回 BadRequest(ModelState);
            }
            ActiveCitizen activeCitizen = json;
            var query = (来自 db.Citizen 中的 c
                其中 c.ccbi == activeCitizen.NumDocument
                选择c.idCitizen).SingleOrDefault();
            地址 地址 = 新地址()
            {
                纬度 = 12,
                长 = 12,
                街道=“Rua do Santuario”,
                邮政编码 = "4490-554",
                地点=“巴塞洛斯”
            };


            OccurenceType 发生类型 = new OccurenceType()
            {
                标题 = activeCitizen.Description,               
            };
            if (查询 == 0)
            {
                公民=新公民()
                {
                    ccbi = activeCitizen.NumDocument,
                    nif = activeCitizen.NIF,
                    联系人 = 新联系人()
                    {
                        名称 = activeCitizen.Name,
                        电子邮件 = activeCitizen.Email,
                        电话 = activeCitizen.Phone
                    },
                    地址=地址
                };
            }
            别的
            {
                公民 = db.Citizen.Find(查询);
            }                   

            发生次数 = new Occurence()
            {
                已解决 = 0,
                发生日期时间 = 新日期时间(2017年5月23日),
                地址=地址,
                发生类型=发生类型,
                公民=公民
            };

            db.Address.Add(地址);
            db.OccurenceType.Add(occurrenceType);
            if (查询 == 0)
            {
                db.Contact.Add(公民.Contact);
                db.Citizen.Add(公民);
            }           
            db.Occurence.Add(发生);
            db.SaveChanges();
            return CreatedAtRoute("DefaultApi", new { id =occurrence.idOccurence }, activeCitizen);
        }


提前致谢!

Raf*_*lho 5

上面的代码是正确的,似乎问题出在表 OccurenceImage 上,字段idOccurenceImage身份规范已禁用,只需要启用并像魅力一样工作。我希望这可以帮助其他人解决此类新手问题!