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; }
我正在启动代码优先 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; }