【发布时间】:2013-01-18 16:10:21
【问题描述】:
按照MVC Music Store 教程,数据库中植入了示例数据。 Album 类如下:
namespace MvcMusicStore.Models
{
public class Album
{
public int AlbumId { get; set;}
// ...
}
}
然后在本教程中使用的示例数据类中,在 Seed() 方法中创建一个 Album 对象,如下所示:
new Album { Title = "The Best Of Billy Cobham",
Genre = genres.Single(g => g.Name == "Jazz"),
Price = 8.99M, Artist = artists.Single(a => a.Name == "Billy Cobham"),
AlbumArtUrl = "/Content/Images/placeholder.gif" }
在我的项目中,我有一个班级Tenant:
public class Tenant
{
[key]
public int TenantId { get; set;}
// ...
}
在我的Seed() 方法中,我创建了一个这样的租户:
new Tenant { UserId=1, UserName="Matthew" /*...*/ }
在我的 Seed() 方法中,我包含了租户 PK,即 UserId - 租户派生自用户。我想知道,因为在 Seed() 方法中我已经明确表示租户的 UserId PK 为 1,所以在方法运行时会导致问题吗?我问是因为在音乐商店教程中,作者没有包含专辑的PK。
所以创建专辑时没有明确说明 PK。 EF会默认应用PK吗?我刚刚花了一段时间为我自己的项目创建了很多示例数据,并且我已经手动将很多实体的 PK 放入 - EF 会接受这个还是会给我带来问题?播种是生成样本数据的最佳方式 - 替代方案吗?
【问题讨论】:
-
EF 将在您每次添加并将更改保存到 db afaik 时创建一个适当的 PK。在调用 SaveChanges 之前,添加的模型不会反映 PK
-
并非所有映射到表的类的 PK 都用
[key]注释并且类型为int。
标签: c# entity-framework ef-code-first entity-framework-migrations seeding