用外键播种

时间:2014-12-15 16:38:46

标签: asp.net-mvc-4 entity-framework-5

我想要完成的是我试图通过使用迁移来获取数据库并获得错误b / c其中一个表/类有一个外键,当我尝试种子数据时,我保持得到一个错误。这是第一次这样做,所以非常感谢任何帮助。

以下是我的课程:

 public class SelectOption
{
    [Key]
    public int Id { get; set; }

    public SelectOptionType OptionTypeId { get; set; }

    [StringLength(100, ErrorMessage = "UserName length exceeded.")]
    public string OptionValue { get; set; }
}

 public class SelectOptionType
{
    [Key]
    public int Id { get; set; }

    [StringLength(100, ErrorMessage = "Name length exceeded.")]
    public string Name { get; set; }
}

这是我的种子方法:

 protected override void Seed(TestApp.Infrastructure.Context context)
    {

        context.SelectOptionTypes.AddOrUpdate(d => d.Name,
            new SelectOptionType() { Name = "Cleaning/Housekeeping"},
            new SelectOptionType() { Name = "Doors"},
            new SelectOptionType() { Name = "Electrical"},
            new SelectOptionType() { Name = "Fire and Safety"},
            new SelectOptionType() { Name = "Furniture"},
            new SelectOptionType() { Name = "General Repairs"},
            new SelectOptionType() { Name = "Heating/Air Conditioning"},
            new SelectOptionType() { Name = "Key/Card Access"},
            new SelectOptionType() { Name = "Light Bulbs/Lighting"},
            new SelectOptionType() { Name = "Plumbering"},
            new SelectOptionType() { Name = "University Applicances"},
            new SelectOptionType() { Name = "Pest Control"}
            );

        context.SelectOptions.AddOrUpdate(d => d.OptionTypeId,
            new SelectOption() { OptionTypeId = new SelectOptionType() { Name = "Cleaning/Housekeeping" }, OptionValue = "Carpet is wet" }
            );




    }

错误我是包管理器控制台中的接收者: 无法创建“TestApplication.Model.SelectOptionType”类型的常量值。在此上下文中仅支持原始类型或枚举类型。

1 个答案:

答案 0 :(得分:0)

您当前的问题是,您无法使用类似引用属性的内容作为AddOrUpdate的第一个参数。它必须传递一个标量属性(字符串,整数等)。如果您有一个实际的id属性来表示关系,那么OptionTypeId的类型为int,然后您的引用属性就像OptionType,那么您可以使用OptionTypeId }作为第一个参数的属性。