如何在实体代码优先中使用多对多关系为数据库设定种子

时间:2012-12-07 22:01:06

标签: c# asp.net-mvc-4 ef-code-first

我的代码中有多对多关系,我正在尝试为数据库设定种子。这是我的种子方法:

var loc = new List<Location> {
      new Location { LocationName = "Paradise Lane" },
      new Location { LocationName = "81st Street" }
};
loc.ForEach(l => context.Locations.Add(l));


var soft = new List<Software> {
     new Software { Title = "Adobe Creative Suite", ... Locations = loc.Single(s => s.LocationName = "Paradise Lane")}
};
soft.ForEach(s => context.Software.Add(s));

这是我的位置课程:

public class Location
    {
        public int Id { get; set; }
        [Required]
        [StringLength(20)]
        public string LocationName { get; set; }
        public virtual ICollection<Software> Software { get; set; }
    }

这是我的软件类:

public class Software
    {
        public int Id { get; set; }
        [Required]
        [StringLength(128)]
        public string Title { get; set; }
        [Required]
        [StringLength(10)]
        public string Version { get; set; }
        [Required]
        [StringLength(128)]
        public string SerialNumber { get; set; }
        [Required]
        [StringLength(3)]
        public string Platform { get; set; }
        [StringLength(1000)]
        public string Notes { get; set; }
        [Required]
        [StringLength(15)]
        public string PurchaseDate { get; set; }
        public bool Suite { get; set; }
        public string SubscriptionEndDate { get; set; }
        //[Required]
        //[StringLength(3)]
        public int SeatCount { get; set; }
        public virtual ICollection<Location> Locations { get; set; }
        public virtual ICollection<SoftwarePublisher> Publishers { get; set; }
        public virtual ICollection<SoftwareType> Types { get; set; }

    }

我收到两个错误。一,它告诉我我不能隐含地将字符串转换为bool。我甚至不知道我是想做什么的。而且,两个,不能将lambda express转换为委托,因为块中的返回类型不能隐式转换为委托返回类型。这是对iCollection的引用吗?

1 个答案:

答案 0 :(得分:1)

你错过了一个等号。双等于比较。

loc.Single(s => s.LocationName = "Paradise Lane")

vs

loc.Single(s => s.LocationName == "Paradise Lane")

此外,您无法.Single()进入地理位置,因为它是ICollectionSingle返回1个对象,而不是集合。你应该使用.Where代替。或者您可以在其中隐式声明一个数组,并在其中使用.Single()代码。

编辑:显然.Where()不能很好地投射到ICollection。添加一个ToArray,你就会得到一个可以接受的数组。