实体框架核心-如何正确定义也是外键的主键?

时间:2019-09-23 15:24:40

标签: entity-framework entity-framework-core

我有以下实体:

class Topic {
    public int TopicId { get; set; }
}

public class Post {
   public int PostId { get; set; }
   public int TopicId { get; set; } 
}

Topic.TopicId和Post.PostId基于称为“ PostIdSequence”的SQL序列。如果TopicId和PostId相同,则表示该特定帖子为“主题帖子”。

我希望能够在创建新的“主题”时做类似的事情(应该有一个具有相同PostId和TopicId的匹配帖子):

var topic = new Topic() {};
var post = new Post() {};
DbContext.Topics.Add(topic);
DbContext.Posts.Add(post);
DbContext.SaveChanges();

因此,基本上,它应该自动用PostIdSequence的下一个值填充“ Topic.TopicId”,然后将其分配给Post.PostId。

创建这些实体类的“正确”方法是什么?

1 个答案:

答案 0 :(得分:0)

如果我错了,请纠正我。 根据我的理解,我认为您违反了SQL基础...

您不能将PK作为FK进行,也不能在同一张表中进行大于1的PK。

  

要解决您的问题,您必须声明最大1个PK和1个或大于1个   FK。

public class Student
{
    public int StudentID { get; set; }
    public string StudentName { get; set; }

    //Foreign key for Standard
    public int StandardId { get; set; }
    public Standard Standard { get; set; }
}

public class Standard
{
    public int StandardId { get; set; }
    public string StandardName { get; set; }

    public ICollection<Student> Students { get; set; }
}

请随时询问您是否有任何疑问。