Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC使用代码优先实体框架将列表创建为模型属性,而不是作为外键添加到DB中_C#_Asp.net Mvc_Entity Framework_Foreign Key Relationship - Fatal编程技术网

C# MVC使用代码优先实体框架将列表创建为模型属性,而不是作为外键添加到DB中

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

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

}

如何在消息和标记之间创建外键关系

我假设您需要一对多关系来重用现有标记

首先,您必须向标记类添加对消息的引用

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; }