繁体   English   中英

首先使用EF代码,子级包含父级对象列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM