C# MVC4种子数据库外键(按Id)

C# MVC4种子数据库外键(按Id),c#,ef-code-first,asp.net-mvc-4,C#,Ef Code First,Asp.net Mvc 4,我有两个类,它们保存餐厅的数据 Status.cs public class Status { [Required] public int StatusId { get; set; } [Required] [DisplayName("Status")] public string Name { get; set; } } public class Restaurant { public int RestaurantId { get; set

我有两个类,它们保存餐厅的数据

Status.cs

public class Status
{

    [Required]
    public int StatusId { get; set; }

    [Required]
    [DisplayName("Status")]
    public string Name { get; set; }
}
public class Restaurant
{
    public int RestaurantId { get; set; }

    [Required]
    public string Name { get; set; }

    [Required]
    [EmailAddress]
    public string Email { get; set; }

    [Required]
    public string Telephone { get; set; }

    [Required]
    public int StatusId { get; set; }



    // NAVIGATION PROPERTIES

    public virtual Status Status { get; set; }
}
Restaurant.cs

public class Status
{

    [Required]
    public int StatusId { get; set; }

    [Required]
    [DisplayName("Status")]
    public string Name { get; set; }
}
public class Restaurant
{
    public int RestaurantId { get; set; }

    [Required]
    public string Name { get; set; }

    [Required]
    [EmailAddress]
    public string Email { get; set; }

    [Required]
    public string Telephone { get; set; }

    [Required]
    public int StatusId { get; set; }



    // NAVIGATION PROPERTIES

    public virtual Status Status { get; set; }
}
我正试图将数据植入数据库

首先,我为status表添加种子,然后我希望为Restaurants表添加种子

var statuses = new List<Status>
{
    new Status { Name = "Draft" },
    new Status { Name = "Live" },
    new Status { Name = "Invisible" },
    new Status { Name = "Discontinued" }
};
statuses.ForEach(a => context.Statuses.Add(a));

var restaurants = new List<Restaurant> 
{ 
    new Restaurant { Name = "The Restaurant Name", Email = "email@restaurant.com", Telephone = "012345566787", StatusId = 1 }
};
restaurants.ForEach(a=>context.Restaurants.Add(a));

base.seed(context);

每次我创建状态为“Draft”的新餐厅时,这不会在状态表中生成一个名为status的新行吗?

不要设置
状态ID
,设置
状态

var restaurants = new List<Restaurant> 
{ 
    new Restaurant { 
        Name = "The Restaurant Name", 
        Email = "email@restaurant.com", 
        Telephone = "012345566787", 
        Status = statuses.Single(s=>s.Name=="Draft") }
};
var=新列表
{ 
新餐厅{
Name=“餐厅名称”,
电子邮件=”email@restaurant.com", 
电话=“012345566787”,
Status=Status.Single(s=>s.Name==“草稿”)}
};
这样,由上下文设置
状态ID
,并使用与
状态相同的ID

如果您希望通过索引引用列表中的状态(例如,
状态[0]
对于
“草稿”
),该索引也有效;不过,IMHO认为,按名称选择更合适

编辑

只需阅读你问题的结尾,就可以回答:


当您创建一个“新”的
状态
并将其附加到您的
餐厅
时,上下文不知道您要使用
“草稿”
的现有状态,因此它会按照您告诉它的做-创建一个新状态。当您从上下文附加一个现有的
状态时,将使用该ID,因为它是同一个实例。

Aaaah,我现在就知道了。非常感谢。工作得很好。不过,在解决方案中,有一件事需要是s.Name==“Draft”。