当前位置: 首页 > 知识库问答 >
问题:

ASP. NET MVC Image使用Entity Framework在数据库上上传和创建记录

郭翰翮
2023-03-14

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

  1. 图像
  2. 发生图像
  3. 发生

模型图

在我的WebAPI中,我有两个控制器,一个用于处理图像上载,另一个用于处理事件。我试图在创建occurrenceimage记录时设置自定义ID,但没有成功。

ImageUploadController。cs

[HttpPost]
        public HttpResponseMessage UploadImage(string imageName)
        {
            var result = new HttpResponseMessage(HttpStatusCode.OK);
            if (Request.Content.IsMimeMultipartContent())
            {
                Request.Content.LoadIntoBufferAsync().Wait();
                Request.Content.ReadAsMultipartAsync(new MultipartMemoryStreamProvider()).ContinueWith((task) =>
                {
                    MultipartMemoryStreamProvider provider = task.Result;
                    foreach (HttpContent content in provider.Contents)
                    {
                        Stream stream = content.ReadAsStreamAsync().Result;
                        Image image = Image.FromStream(stream);
                        var testName = content.Headers.ContentDisposition.Name;
                        String filePath = HostingEnvironment.MapPath("~/Images/");
                        string nameImg = imageName + Guid.NewGuid();
                        String fullPath = Path.Combine(filePath, nameImg + ".jpg");
                        image.Save(fullPath);
                        AddImageToDb(nameImg);
                    }
                });

                return result;
            }
            else
            {
                throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotAcceptable, "This request is not properly formatted"));
            }

        }

        private void AddImageToDb(string imageName)
        {
            VisitDatabase.Image image = new VisitDatabase.Image()
            {
                urlImage = imageName + ".jpg"
            };

            OccurenceImage occurenceImage = new OccurenceImage()
            {
               idOccurence = 18,
               Image = image,

            };
            db.Image.Add(image);
            db.OccurenceImage.Add(occurenceImage);
            db.SaveChanges();
        }


发生控制器。cs公司

[ResponseType(typeof(ActiveCitizen))]
        public IHttpActionResult PostOccurence(ActiveCitizen json)
        {
            Citizen citizen;
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }
            ActiveCitizen activeCitizen = json;
            var query = (from c in db.Citizen
                where c.ccbi == activeCitizen.NumDocument
                select c.idCitizen).SingleOrDefault();
            Address address = new Address()
            {
                lat = 12,
                lon = 12,
                street = "Rua do Santuario",
                postalCode = "4490-554",
                locality = "Barcelos"
            };


            OccurenceType occurenceType = new OccurenceType()
            {
                title = activeCitizen.Description,               
            };
            if (query == 0)
            {
                citizen = new Citizen()
                {
                    ccbi = activeCitizen.NumDocument,
                    nif = activeCitizen.NIF,
                    Contact = new Contact()
                    {
                        name = activeCitizen.Name,
                        email = activeCitizen.Email,
                        phone = activeCitizen.Phone
                    },
                    Address = address
                };
            }
            else
            {
                citizen = db.Citizen.Find(query);
            }                   

            Occurence occurence = new Occurence()
            {
                solved = 0,
                occurenceDateTime = new DateTime(2017, 5, 23),
                Address = address,
                OccurenceType = occurenceType,
                Citizen = citizen
            };

            db.Address.Add(address);
            db.OccurenceType.Add(occurenceType);
            if (query == 0)
            {
                db.Contact.Add(citizen.Contact);
                db.Citizen.Add(citizen);
            }           
            db.Occurence.Add(occurence);
            db.SaveChanges();
            return CreatedAtRoute("DefaultApi", new { id = occurence.idOccurence }, activeCitizen);
        }


提前感谢!

共有1个答案

马晓博
2023-03-14

上面的代码是正确的,似乎问题出在表occurrenceimage中,字段idoccurrenceimage标识规范被禁用,只需要启用,并且工作正常。我希望这能帮助其他有这种新手问题的人!

 类似资料:
  • 问题内容: 我正在尝试使用JDBC在oracle数据库上创建Java源对象。 我要创建的源如下: 我已经尝试过使用execute方法,这给了我。 当我尝试在普通对象上使用execute方法时,出现错误:“ 有人知道我在做什么错吗?似乎在Google上也找不到任何内容。 编辑:这是我用来尝试执行脚本的代码(字符串包含您可以在上面看到的脚本,变量是对象。 如果我尝试使用Statement就是这样: 问

  • 我有一个JavaApplet,它显示来自Derby数据库的2D表格数据。我也在使用Netbean。我希望这个应用程序在网页上。我已经将html文档和所有. class文件上传到服务器上的适当目录中。剩下的是访问数据库。 我想使用Embedded Derby,以便我的应用程序包含数据库(我对这个事实的理解正确吗?)。然后我应该能够将html和jar/class文件上传到服务器,我的应用程序将被部署。

  • 问题内容: 我的项目中有注释驱动的hibernate功能。 现在,我想在列上创建索引。我当前的列定义是 我在这里添加注释 然后删除表并重新启动Tomcat服务器。实例化服务器后,创建了表,但是在以下查询中看不到新索引。 预期用新索引构造表。我在MySQL中使用InnoDB。 问题答案: 有趣的是,在Hibernate配置中,我正在使用。 这修改了一个现有的数据库。我是手动删除该表并重新启动Tomc

  • 我使用与已安装的WAMPServer v-3.2.0关联的phpMyAdmin创建了一个MySQL数据库“testdatabase”,但是,当我尝试使用php连接数据库时,如下面代码中所列: 异常getMessage和GetTraceAssString打印以下错误消息: 连接失败:SQLSTATE[HY000][1049]未知数据库“testdatabase”#0 C:\wamp64\www\Te

  • 问题内容: 我有一个在Java堆栈(Struts 2 + Spring + Hibernate)上运行的Web应用程序,并在MySQL中保持不变。我查看了NoSQL数据库,它们肯定比RDBMS更容易推理和使用。这是一个音乐流应用程序,用于存储艺术家信息并允许用户保存播放列表。 我想知道切换到NoSQL DB(CouchDB,MongoDB,Cassandra)是否有任何优势(性能,硬件成本,简化代

  • 问题内容: 我有一个像这样的应用程序工厂 然后,我有一个脚本,可以在应用程序上下文之外获取CSV。该脚本是一个cron,每x小时运行一次 我想以某种方式更新应用程序正在使用的sqlite数据库。这可能吗? 问题答案: Flask-SQLAlchemy只需要一个应用程序上下文即可运行。您可以手动创建应用上下文。 这来自这里和这里的文档。