问题涉及缺少2个表的链接关系条目。
我创建了两个类:
文件:
public class File
{
public int FileId {get; set;}
public string Name{get; set;{
public ICollection<int> TagId {get; set;}
public virtual ICollection<Tag> Tag {get; set;}
}
标签:
public class Tag
{
public int TagId {get; set;}
public string Name {get; set;}
public ICollection<int> FileId {get; set;}
public ICollection<File> File {get; set;}
}
创建表格:
public DbSet<File> Files { get; set; }
public DbSet<Tag> Tags{ get; set; }
在数据库中自动创建了另一个表TagFiles,其中表之间存在关系。
我添加了StartInitializer类,每次重新启动我都会启动数据库。在init方法中,我添加了新记录:
...
var tags = new List<Tag>
{
new Tag() { TagId = 1, Name = "A"},
new Tag() { TagId = 2, Name = "B"},
new Tag() { TagId = 3, Name = "C"},
new Tag() { TagId = 4, Name = "D"},
new Tag() { TagId = 5, Name = "E"},
new Tag() { TagId = 6, Name = "F"},
new Tag() { TagId = 7, Name = "G"}
};
tags.ForEach(g => context.Tags.Add(g));
context.SaveChanges();
var files = new List<File>
{
new File() { FileId = 1, Name = "1", TagId = new List<int>{1, 3, 2, 4}}
};
files.ForEach(g => context.Files.Add(g));
context.SaveChanges();
...
不幸的是,FileETag表条目不是自动添加的,尽管在我看来应该确保TagId = new List <int> {1, 3, 2, 4}
。这里缺少什么东西?
答案 0 :(得分:1)
我认为你的问题在于你不需要的ID收集。
当您首先使用EF代码以获得多对多关系表时,您必须明确提及它。另外,它将被视为2对多关系。
这是我建议的更改:
public class File
{
public int FileId {get; set;}
public string Name{get; set;}
[InverseProperty("Files")]
public virtual ICollection<Tag> Tags {get; set;}
}
public class Tag
{
public int TagId {get; set;}
public string Name {get; set;}
public ICollection<File> Files {get; set;}
}
注意创建该连接的[InverseProperty("Files")]
。