1

使用代码优先/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; }
   }

我已经在数据库中有一些标签——例如“Pub”、“Bakery”。当我尝试将标签分配给一个地方时 - 它总是说“对象引用未设置为对象的实例”。例如,标签“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);

我想将现有标签“Bar”分配给我正在创建的这个新地方 - 但它总是出错,“对象引用未设置为对象的实例。”。

我确定我在这里做了一些非常愚蠢的事情,但无法弄清楚它是什么(我是 MVC 的新手)。谢谢。

4

1 回答 1

4

您需要初始化Tags集合,如下所示:

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

您可以将初始化逻辑移动到 的构造函数中Place,这样会更简洁一些,并且您不必记住每次创建新实例时都创建一个空列表。

于 2013-05-21T11:38:33.470 回答