【发布时间】:2019-02-27 22:40:26
【问题描述】:
我在数据库中有以下结构:
对于上述内容,我在 EF 6.0 CodeFirst 的 C# 代码中有以下内容。
[Table("Person")]
public class User
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public long Id { get; set; }
[Column("FullName")]
[MaxLength(200)]
public string Name { get; set; }
public virtual ICollection<Task> Tasks { get; set; } = new HashSet<Task>();
}
[Table("Task")]
public class Task
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public long Id { get; set; }
[Column("FullName")]
[MaxLength(200)]
public string Title { get; set; }
public virtual ICollection<User> Users { get; set; } = new HashSet<User>();
}
问题是集合根本没有被填充并且总是返回为空。例如,如果我尝试:
userRepository.All.Include(x=>x.Tasks).Where(x=> x.FullName == "John").Select(x=> x.Tasks.Title).ToList();
InnerException = {"无效的对象名称'dbo.PersonTask'。"}
我的代码有什么问题?
【问题讨论】:
-
那么在您的数据库中有一个名为
dbo.PersonTask的表吗?错误消息表明没有,您的映射可能已关闭。 -
是的,但我没有任何映射,因为它没有有用的字段
-
SQL Server 认为您的数据库中没有这样的对象。也许你的连接字符串是错误的。
-
如果您打算将 Table PersonTask 用于映射表,请创建并应用迁移步骤。如果要重用具有不同名称的现有表,请使用 .HasMany().WithMany().Map(m=>m.ToTable()) 函数。
-
有趣。它不能自己挑选所有这些信息吗?这些表已经存在。我们从不使用代码在数据库中构建任何东西
标签: c# sql-server entity-framework ef-code-first many-to-many