[英]Entity Framework - seeding database - does PK need to be included in Seed method?
在MVC音乐商店教程之后,数据库将附带样本数据。 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()
方法中,我包含了Tenant PK,即UserId - Tenant派生自User。 我想知道,因为在Seed()方法中我明确地说租户的UserId的PK是1,这会在方法运行时引起问题吗? 我问,因为在音乐商店教程中,作者没有收录专辑的PK。
所以在创建专辑时没有明确说明PK。 EF默认会应用PK吗? 我花了一段时间为我自己的项目创建了大量的样本数据,并且我已经手动将很多实体放入PK中 - EF会接受这个还是会导致我出现问题? 播种是生成样本数据的最佳方式 - 替代方案?
如果不添加[Key]
属性,EF将尝试查找名为Id
或<yourClassName>Id
的int可读 - 可写属性。
就这样。 这就是为什么AlbumId被作为类Album的PK的原因:该类中没有关键属性,AlbumId = <nameOfClass>Id
,它是一个可读写的int。
如果您设置了Key属性,EF将不会尝试查找另一个属性。 这只是一个惯例,让你不那么冗长。
对于样本数据, Seed()
方法的主体是将它们放入Code First的好方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.