MVC 创建一个列表作为模型 属性 没有作为外键添加到数据库中,代码优先 entity framework

MVC creating a list as a model property not being added as foreign key to DB with code first entity framework

我正在启动代码优先 EF MVC 项目。下面是我正在创建的消息模型的代码。是否可以创建一个标签 属性,它是一个标签列表(我创建的另一个模型),就像我在下面尝试的那样?

public class Message
{
    public int Id { get; set; }
    public string Text { get; set; }
    public byte[] Attachment { get; set; }
    [Required]
    public MessageBoard MessageBoard { get; set; }

    [Required]
    public virtual List<Tag> Tags { get; set; } 

}

尝试 update-database -verbose 命令后,我发现它没有向我的数据库添加 Tags class。控制台显示此 db 命令用于消息:

CREATE TABLE [dbo].[Messages] (
    [Id] [int] NOT NULL IDENTITY,
    [Text] [nvarchar](max),
    [Attachment] [varbinary](max),
    [MessageBoard_Id] [int] NOT NULL,
    CONSTRAINT [PK_dbo.Messages] PRIMARY KEY ([Id])
)

如何在消息和标签之间创建这种外键关系?

我假设您是多对多关系以重用现有标签。

首先,您必须在标签中添加 class 对消息的引用

public virtual List<Message> Messages { get; set; };

然后在您的模型配置中 class 您必须使用以下代码设置多对多关系:

 modelBuilder.Entity<Message>()
                   .HasMany<Tag>(m => m.Tags)
                   .WithMany(t => t.Messages)
                   .Map(mt =>
                            {
                                mt.MapLeftKey("MessageID");
                                mt.MapRightKey("TagId");
                                mt.ToTable("MessagesTag");  //Name of table many to many
                            });

并且不要忘记在您的 DBContext 中添加 class 标签。

public DbSet<Tag> Tag { get; set; }