繁体   English   中英

MVC使用代码优先实体框架将列表创建为模型属性,而不将其作为外键添加到数据库中

[英]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类添加到我的数据库中。 控制台显示此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])
)

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

我假设您与多对多关系可以重复使用现有标签。

首先,您必须在Tag类中添加对Message的引用

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

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

 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中添加类Tag。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM