我有两个实体,即想法和反应
主题:
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中有一个用于IdeaId
和ParentId
的列。但是,当我想对这个话题发表自己的看法时,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。
答案 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的显式配置只剩下更少的奥秘来浪费时间。 :)