C# MVC使用代码优先实体框架将列表创建为模型属性,而不是作为外键添加到DB中
我正在启动一个代码优先的EF MVC项目。下面是我正在创建的消息模型的代码。是否可以像我下面尝试的那样,创建一个标记列表(我创建的另一个模型)的标记属性C# MVC使用代码优先实体框架将列表创建为模型属性,而不是作为外键添加到DB中,c#,asp.net-mvc,entity-framework,foreign-key-relationship,C#,Asp.net Mvc,Entity Framework,Foreign Key Relationship,我正在启动一个代码优先的EF MVC项目。下面是我正在创建的消息模型的代码。是否可以像我下面尝试的那样,创建一个标记列表(我创建的另一个模型)的标记属性 public class Message { public int Id { get; set; } public string Text { get; set; } public byte[] Attachment { get; set; } [Required] public MessageBoard
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; }
}
如何在消息和标记之间创建外键关系 我假设您需要一对多关系来重用现有标记 首先,您必须向标记类添加对消息的引用
public virtual List<Message> Messages { get; set; };
公共虚拟列表消息{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
});
modelBuilder.Entity()
.HasMany(m=>m.Tags)
.WithMany(t=>t.Messages)
.Map(mt=>
{
MapLeftKey山(“MessageID”);
mt.MapRightKey(“TagId”);
mt.ToTable(“MessagesTag”);//表多对多的名称
});
不要忘了在DBContext中添加class标记
public DbSet<Tag> Tag { get; set; }
public DbSet标记{get;set;}
您希望消息和标记之间存在哪种关系?多对多还是一对多?多对多。谢谢你的回答!为什么DbSet
是虚拟的?
public DbSet<Tag> Tag { get; set; }