在EF中FK为空的问题

时间:2019-03-04 19:42:10

标签: entity-framework .net-core foreign-keys

我有两个实体,即想法和反应

主题:

public class Idea
    {
        public string Id { get; set; }
        public string Description { get; set; }
        public DateTime TimePosted { get; set; }

        public ICollection<Reaction> Reactions { get; set; }
    }

反应:

public class Reaction
    {
        public string Id { get; set; }
        public string Text { get; set; }
        public DateTime TimePosted { get; set; }
        public Reaction Parent { get; set; }
    }

SQLite数据库生成良好,而无需在我的DbContext中的OnModelCreating中进行任何调整,因为我的Response中有一个用于IdeaIdParentId的列。但是,当我想对这个话题发表自己的看法时,FK似乎从未被填补。

这是我尝试添加的方式:

public void AddIdeaReaction(string id, string reactionText)
        {
            Idea idea = _ideaRepo.GetById(id);
            Reaction reaction = new Reaction()
            {
                Id = Guid.NewGuid().ToString(),
                TimePosted = DateTime.Now,
                Text = reactionText
            };

            _reactionRepo.Create(reaction);
            idea.Reactions.Add(reaction);
            UpdateIdea(idea);
        }

该反应已添加到表中,但IdeaId的FK保持为NULL。

我在做什么错了?

编辑: 问题是我将ChangeTracker的自动跟踪设置为false。

2 个答案:

答案 0 :(得分:0)

您需要在IdeaId表中添加Reaction

public class Reaction
{
    public string Id { get; set; }
    public string Text { get; set; }
    public DateTime TimePosted { get; set; }
    public Reaction Parent { get; set; }
    public int IdeaId { get; set; }
}

像该EF一样,它可以识别创建或更新实体时数据的关联方式

对不起,我的英语。

答案 1 :(得分:0)

您仍然需要通过OnModelCreating或Configuration告诉EF有关该关系的信息。 EF可以通过约定来填补空白,但是老实说,我不指望它,而只是使用显式映射,因为那样我就可以确定它以我期望的方式关联事物。

for value in hash.values do
    value = value * value
end

这也可以通过属性来实现。 IMO的显式配置只剩下更少的奥秘来浪费时间。 :)