简体   繁体   中英

Insert a new SubItem on Entity Framework

So, I need to insert a new SubItem in a Items database. I mean, i have the following model classes:

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; }
    }

When I insert a new user, its Ok. No errors. The problem is when the user is already in database, but the Event is new and is not at the database, so i need to insert it. I get a error when try to Add. The code:

[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();

        }

The error is at the line:

faceUser.FaceEvents.FaceEventDatas.Add(faceEventsData);

I am missing something and i am new with ENtity. I appreciate a help.

UPDATE:

Error

Object reference not set to an instance of an object

HOw the users here, gave me a light, i discovered that "FaceEventsDatas" was null. So i putted the code:

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

after listevents. And changed to Attach instead of context Add, because is a insert a row that belongs to another class.

db.FacebookDataUsers.Attach(faceUser);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM