1

Code First / MVC 4 / EF 5 の使用

私は場所のオブジェクトを持っています:

   public class Place
   {
      public virtual int PlaceID { get; set; }
      public virtual ICollection<Tag> Tags { get; set; }
      public virtual DateTime DateAdded { get; set; }
      public virtual string Name { get; set; }
      public virtual string URL { get; set; }
}

および Tag オブジェクト - それらの間に多対多の関係がある

   public class Tag
   {
      public virtual int TagID { get; set; }
      public virtual string Name { get; set; }
      public virtual string NamePlural { get; set; }
      public virtual ICollection<Place> Places { get; set; }
   }

データベースには既にいくつかのタグがあります。たとえば、「パブ」、「ベーカリー」などです。タグを場所に割り当てようとすると、常に「オブジェクト参照がオブジェクトのインスタンスに設定されていません」と表示されます。たとえば、「Bakery」と「Pub」というタグはすでにデータベースにあるので、次のように実行します。

Place myPlace = new Place
       {
          PlaceID = 1,
          Name = "Shoreditch Grind",
          URL = "shoreditch-grind-cafe",
       };


       Tag myTag = db.Tags.Single(t => t.Name == "Bar");

       myPlace.Tags.Add(myTag);

作成中のこの新しい場所に既存のタグ「バー」を割り当てたいのですが、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが常に発生します。

私はここで本当にばかげたことをしていると確信していますが、それが何であるかを理解することはできません(MVCは初めてです)。ありがとう。

4

1 に答える 1

4

You need to initialize the Tags collection, like this:

Place myPlace = new Place
{
    PlaceID = 1,
    Name = "Shoreditch Grind",
    URL = "shoreditch-grind-cafe",
    Tags = new List<Tag>()
};

Tag myTag = db.Tags.Single(t => t.Name == "Bar");

myPlace.Tags.Add(myTag);

You could move the initialization logic to the constructor of Place, which would be a little neater and you wouldn't have to remember to create an empty list every time you create a new instance.

于 2013-05-21T11:38:33.470 に答える