[英]EF code first, child holds a list of parent objects
首先我在EF代码方面遇到了麻烦,需要帮助。 我有一个从Person
继承的Student
。 学生可以有像Worker
这样的朋友,也可以从人那里继承下来。
class Person
{
public int Id { get; set; }
//...
}
class Student : Person
{
public virtual List<Person> Friends { get; set; }
//...
}
class Worker : Person
{
//there are other classes like this one
}
如果尝试将实体写入sqlite DB,这是我得到的例外:
元数据集合中不存在标识为“ PersonSelf”的成员。
例如,如果我将列表更改为Worker
,则它正在工作,但与Person
无关。 我该如何解决? 谢谢您的帮助。
您应该没有任何问题,如果我已经很好地定义了模型和数据库上下文,那么我认为。 我在github上创建了一个小型仓库来测试您的模型。 这是github repo的链接我的模型非常非常简单:
public class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class Student : Person
{
public Student()
{
Friends=new List<Person>();
}
public virtual List<Person> Friends { get; set; }
public int StudentAge { get; set; }
}
public class Worker : Person
{
public decimal WorkerSalary { get; set; }
}
我正在使用DotNet Core,并且能够创建数据库和插入数据。
请检查存储库,让我知道它是否适合您。
谢谢你的提示。 要解决此问题,您需要告诉EF在数据库中创建映射表。 原因是因为这是一个“多对多”问题。
也请考虑我的其他帖子 。
public class ModelConfiguration
{
private static void ConfigureGridDataCollectionEntity(DbModelBuilder modelBuilder)
{
// Student
modelBuilder.Entity<Student>()
.HasMany(p => p.Friends)
.WithMany()
.Map(cs =>
{
cs.MapLeftKey("StudentId");
cs.MapRightKey("FriendsId");
cs.ToTable("StudentFriend");
});
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.