Gra*_*avy 2 c# ef-code-first asp.net-mvc-4
我有2个班级来保存餐馆的数据.
Status.cs
public class Status
{
[Required]
public int StatusId { get; set; }
[Required]
[DisplayName("Status")]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Restaurant.cs
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; }
}
Run Code Online (Sandbox Code Playgroud)
我试图将数据播种到数据库中.
首先,我播种状态表,然后我希望种子餐馆表.
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);
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为它不喜欢我尝试将StatusId = 1种入餐厅的方式.
我知道我可以在新餐厅内创建一个新状态,但是,我已经将状态播种到数据库中.如何设置餐厅的状态以起草???
我每次都必须这样做吗???
new Restaurant { Name = "The Restaurant Name", Email = "email@restaurant.com", Telephone = "012345566787", StatusId = new Status { Name = "Draft"} }
Run Code Online (Sandbox Code Playgroud)
每当我创建一个状态为"草稿"的新餐厅时,这不会在状态表中生成一个名为Status的新行吗?
不要设置StatusId
,设置Status
:
var restaurants = new List<Restaurant>
{
new Restaurant {
Name = "The Restaurant Name",
Email = "email@restaurant.com",
Telephone = "012345566787",
Status = statuses.Single(s=>s.Name=="Draft") }
};
Run Code Online (Sandbox Code Playgroud)
这样StatusID
就由上下文设置并使用相同的ID Status
.
如果您想通过索引引用列表中的状态(例如statuses[0]
for "Draft"
)也可以; 恕我直言,按名称选择更合适.
编辑
只是阅读你的问题的结尾 - 所以回答:
当您创建"新" Status
并将其附加到您Restaurant
的上下文时,上下文不知道您要使用现有状态"Draft"
,因此它会按照您的说法执行 - 创建一个新的状态.当你Status
从上下文附加一个现有的时候使用那个ID,因为它是同一个实例.
归档时间: |
|
查看次数: |
2454 次 |
最近记录: |