增加与EF的多对多关系的价值ASP.Net MVC 4

本文关键字:ASP Net MVC 关系 EF 增加 | 更新日期: 2023-09-27 18:14:29

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

我已经在数据库中有一些标签-例如"酒吧","面包店"。当我尝试将标签分配给某个位置时,它总是说"对象引用未设置为对象的实例"。例如,标签"面包店"&"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)。谢谢。

增加与EF的多对多关系的价值ASP.Net MVC 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的构造函数中,这样会简洁一些,并且您不必在每次创建新实例时都记住创建一个空列表。