C# MVC4种子数据库外键(按Id)
我有两个类,它们保存餐厅的数据 Status.csC# 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
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”。