[英]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.