0

遵循MVC 音乐商店教程,数据库以示例数据为种子。Album课程如下:

namespace MvcMusicStore.Models
{
    public class Album
    {
        public int      AlbumId     { get; set;}
        // ...
    }
}

然后在本教程中使用的示例数据类中,在方法Album中创建一个对象,如下所示Seed()

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()方法中,我包含了作为 UserId 的租户 PK - 租户是从用户派生的。我想知道,因为在 Seed() 方法中我明确表示租户的 UserId PK 为 1,所以在方法运行时会导致问题吗?我问是因为在音乐商店教程中,作者没有包含专辑的PK。

所以创建专辑时没有明确说明 PK。EF会默认应用PK吗?我刚刚花了一段时间为我自己的项目创建了很多示例数据,并且我已经手动将很多实体的 PK 放入了 - EF 会接受这个还是会给我带来问题?播种是生成样本数据的最佳方式 - 替代方案吗?

4

1 回答 1

2

当您不添加[Key]属性时,EF 将尝试查找名为Idor的 int 可读可写属性<yourClassName>Id

就这样。这就是为什么将 AlbumId 作为类 Album 的 PK 的原因:该类中不存在关键属性 AlbumId = <nameOfClass>Id,它是一个可读可写的 int。

如果您设置了 Key 属性,EF 将不会尝试查找另一个。这只是一个约定,可以让您不那么冗长。

对于示例数据,Seed()方法的主体是将它们放入 Code First 的好方法。

于 2013-02-03T23:42:44.300 回答