增加与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)。谢谢。
需要初始化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
的构造函数中,这样会简洁一些,并且您不必在每次创建新实例时都记住创建一个空列表。