1

重複の可能性:
.NETのNullReferenceExceptionとは何ですか?

アドレスと関係のあるクラスEventsがあります。これは、多対多の関係です。イベントにアドレスを追加しようとすると、エラーが発生します。

オブジェクト参照がオブジェクト インスタンスに設定されていません。

これが私のコードです:

イベントクラス

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

アドレスクラス

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

コンテクスト

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

イベントコントローラー

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

「viewEvent.Addresses.Add(address);」の行のコントローラーで エラーが発生します。アドレスにカーソルを合わせると正しい値が表示されますが、オブジェクト参照が設定されていないと表示され続けます...

4

2 に答える 2

3

あなたはあなたのをインスタンス化していないICollection。アドレスを追加しようとすると、Addresses変数がnullになり、が発生しNullReferenceExceptionます。具体的なタイプに初期化します。

if(viewEvent.Addresses == null)
{
    viewEvent.Addresses = new List<Address>();
}
viewEvent.Addresses.Add(addres1);
于 2012-12-28T18:50:03.600 に答える
1

失敗している行の上に次の行を追加します。

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

問題は、現在初期化されているアドレスのリストがないため、最初にアドレスを作成してから、それに追加できることです。

于 2012-12-28T18:49:39.420 に答える