When i create an event with a relationship (many to many) with addresses i get the error: Object reference not set to an instance of an object [duplicate]

StackOverflow https://stackoverflow.com/questions/14074213

سؤال

Possible Duplicate:
What is a NullReferenceException in .NET?

I've got a class Events that has a relationship with addresses, this is a many-to-many relationship. When I try to add the address to my Event it gives the error:

Object reference not set to an instance of an object.

Here is my code :

EVENT CLASS

  public class Event
  {
        public int EventID { get; set; }
        public string EventName { get; set; }
        public string EventImage { get; set; }
        public DateTime EventDate { get; set; }    
        public int ItemID { get; set; }
        public virtual Item Item { get; set; }

        public virtual ICollection<Address> Addresses { get; set; }
  }

ADDRESS CLASS

public class Address
{

    public int Address_id { get; set; }
    public string Address_street { get; set; }
    public int Address_housenumber { get; set; }
    public string Address_bus { get; set; }
    public Nullable<int> Messages_id { get; set; }

    public virtual ICollection<Event> Events { get; set; }
}

CONTEXT

  public class SocialGEOContext : DbContext
  {
    public DbSet<Event> Events { get; set; }
    public DbSet<Address> Addresses { get; set; }
    public DbSet<Item> Items { get; set; }

 protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

      //EVENTS
        modelBuilder.Entity<Event>().HasKey(t => t.EventID);
        modelBuilder.Entity<Event>().ToTable("events", "geodatabase");
        modelBuilder.Entity<Event>().Property(t => t.EventID).HasColumnName("event_id");
        modelBuilder.Entity<Event>().Property(t => t.EventName).HasColumnName("event_name").IsRequired().IsUnicode(false).HasMaxLength(64);
        modelBuilder.Entity<Event>().Property(t => t.EventDate).HasColumnName("event_date");
        modelBuilder.Entity<Event>().Property(t => t.EventImage).HasColumnName("event_image").IsUnicode(false).HasMaxLength(128);
        modelBuilder.Entity<Event>().Property(t => t.ItemID).HasColumnName("item_id");
        modelBuilder.Entity<Event>().HasRequired(t => t.Item).WithMany(t => t.Events).HasForeignKey(d => d.ItemID);

//ADDRESSES
        modelBuilder.Entity<Address>().HasKey(t => t.Address_id);
        modelBuilder.Entity<Address>().ToTable("addresses", "geodatabase");
        modelBuilder.Entity<Address>().Property(t => t.Address_id).HasColumnName("address_id");
        modelBuilder.Entity<Address>().Property(t => t.Address_street).HasColumnName("address_street").IsRequired().IsUnicode(false).HasMaxLength(128);
        modelBuilder.Entity<Address>().Property(t => t.Address_housenumber).HasColumnName("address_housenumber");
        modelBuilder.Entity<Address>().Property(t => t.Address_bus).HasColumnName("address_bus").IsUnicode(false).IsFixedLength().HasMaxLength(1);
        //modelBuilder.Entity<Address>().Property(t => t.messages_id).HasColumnName("messages_id");
        //modelBuilder.Entity<Address>().HasOptional(t => t.message).WithMany(t => t.addresses).HasForeignKey(d => d.messages_id);
        modelBuilder.Entity<Address>()
            .HasMany(t => t.Events)
            .WithMany(t => t.Addresses)
            .Map(m =>
            {
                m.ToTable("event_has_address", "geodatabase");
                m.MapLeftKey("address_id");
                m.MapRightKey("event_id");
            });

EVENTCONTROLLER

        // POST: /Event/Create
        [HttpPost]
        public ActionResult Create(EventAddressViewModel ViewModel)
        {
            if (ModelState.IsValid)
            {
                Item viewItem = ViewModel.Item;
                Address viewAddress = ViewModel.Address;
                Event viewEvent = ViewModel.Event;

                //ADD ITEM
                viewItem.ItemCreateddate = DateTime.Now;
                db.Items.Add(viewItem);
                //ADD EVENT
                viewEvent.Item = viewItem;
                db.Addresses.Add(viewAddress);
                db.SaveChanges();
                Address addres1 = db.Addresses.Find(viewAddress.Address_id);
                viewEvent.Addresses.Add(addres1);
                db.Events.Add(viewEvent);

                db.SaveChanges();

                return RedirectToAction("Index");
            }
            return View(ViewModel);
        }

In my controller on the line with "viewEvent.Addresses.Add(address);" I get the error. When I hover on address it has the correct values but it keeps saying object reference not set...

هل كانت مفيدة؟

المحلول

You're not instantiating your ICollection. When you attempt to add an address, your Addresses variable is null which causes the NullReferenceException. Initialize it to a concrete type:

if(viewEvent.Addresses == null)
{
    viewEvent.Addresses = new List<Address>();
}
viewEvent.Addresses.Add(addres1);

نصائح أخرى

Add this line above the line that's failing:

viewEvent.Addresses = new List<Address>();

The issue is that you don't currently have a listing of addresses that's been initialized so you need to build one first, then you can add to it.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top