簡體   English   中英

實體框架 - 種子數據庫 - PK需要包含在種子方法中嗎?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM