在Entity Framework上插入一个新的SubItem

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Entity Framework上插入一个新的SubItem相关的知识,希望对你有一定的参考价值。

所以,我需要在Items数据库中插入一个新的SubItem。我的意思是,我有以下模型类:

public class FacebookDataUser
    {
        [Key,JsonProperty("id")]
        public string FacebookDataUserId { get; set; }
        public string name { get; set; }
        public string birthday { get; set; }
        public string email { get; set; }
        [JsonProperty("Events")]
        public virtual FaceEvents FaceEvents { get; set; }
        [Column(TypeName = "datetime2")]
        public DateTime DateOfInsert { get; set; }

    }
public class FaceEvents
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int FaceEventsId { get; set; }
        [JsonProperty("data")]
        public ICollection<FaceEventData> FaceEventDatas { get; set; }
    }

    public class FaceEventData
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int FaceEventDataId { get; set; }
        public string description { get; set; }
        public string name { get; set; }
        [Column(TypeName = "datetime2")]
        public DateTime start_time { get; set; }
        [JsonProperty("Place")]
        public virtual FacePlace FacePlace { get; set; }
        public int attending_count { get; set; }     
        public string type { get; set; }
        public string rsvp_status { get; set; }
        [Column(TypeName = "datetime2")]
        public DateTime end_time { get; set; }
    }

当我插入一个新用户时,它的确定。没有错误。问题是当用户已经在数据库中,但事件是新的并且不在数据库中,所以我需要插入它。尝试添加时出错。代码:

[ResponseType(typeof(FacebookDataUser))]
        public async Task<IHttpActionResult> PostFacebookDataUser(FacebookDataUser facebookDataUser)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            FacebookDataUser faceUser = await db.FacebookDataUsers.FindAsync(facebookDataUser.FacebookDataUserId);

            if (faceUser == null)
            {
                facebookDataUser.DateOfInsert = DateTime.Now;
                db.FacebookDataUsers.Add(facebookDataUser);

            }

            else
            {
                var listEvents = facebookDataUser.FaceEvents.FaceEventDatas.ToList();

                for (var i=0; i<= facebookDataUser.FaceEvents.FaceEventDatas.Count; i++)
                {
                    var eventName = listEvents[i].name;

                    var events = db.FacebookDataUsers.Where(b => b.FaceEvents.FaceEventDatas.Select(x => x.name).ToList().Contains(eventName)).FirstOrDefault();
                    if (events == null)
                    {
                        FaceEventData faceEventsData = listEvents[i];

                        try
                        {
                            faceUser.FaceEvents.FaceEventDatas.Add(faceEventsData);

                        }
                        catch (Exception e)
                        {

                        }
                    }
                }

                db.FacebookDataUsers.Add(faceUser);


            }

            await db.SaveChangesAsync();

        }

错误在于:

faceUser.FaceEvents.FaceEventDatas.Add(faceEventsData);

我错过了一些东西,我是ENtity的新手。我很感激帮助。

更新:

错误

你调用的对象是空的

答案

请问这里的用户,给了我一个亮点,我发现“FaceEventsDatas”为空。所以我推出了代码:

var FaceEventDatas = db.FacebookDataUsers.SelectMany(x => x.FaceEvents.FaceEventDatas).ToList();

听完之后。并更改为Attach而不是上下文Add,因为是插入属于另一个类的行。

db.FacebookDataUsers.Attach(faceUser);

以上是关于在Entity Framework上插入一个新的SubItem的主要内容,如果未能解决你的问题,请参考以下文章

使用 Entity Framework 5 将特定 id 插入 MySQL 中的自动递增字段

在使用 Entity Framework 数据库优先在表上插入行之前,如何从 PL/SQL 执行触发器?

Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作

无法在 VS 2017 .NET Core 上启用 Entity Framework 迁移

Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作

ASP.NET里面的Entity framework 更新一对多的的两个表利用savechanges()方法怎么实现