我在这里遇到了一个令我心烦意乱的问题。这是一个非常简单的插入到一个非常简单的表中...我做了一千次,但由于某种原因不能在这里工作。
基本上,我正在运行一个简单的INSERT(通过存储库模式),然后保存上下文更改。没有错误,我可以顺利完成它,但记录不在数据库中。
为了(希望)覆盖我的屁股反对愚蠢:我知道我已连接到正确的数据库,因为它正在获取种子数据(我的应用程序中只有1个连接字符串)。另外,我知道每次都没有重建数据库。
这是调用代码:
var result = new Core.Models.Poll
{
ElectionId = electionId,
DatePublished = pubDate,
DateCreated = DateTime.Now,
NameEn = nameEn,
NameFr = nameFr,
Params = splitVals,
Url = url,
Slug = String.Empty
};
Components.PollRepository.Insert(result);
Components.PollRepository.Save();
以下是存储库中的方法:
public void Insert(Poll poll)
{
Context.Polls.Add(poll);
}
public void Save()
{
Context.SaveChanges();
}
在Context.Polls.Add(poll);
行,我检查我的对象...当我使用poll中的值在SSMS中手动运行insert语句时,创建的记录没有问题。当我在下一行(Context.Entry(poll)
)运行}
时,我看到它的状态已添加(正如预期的那样)。
我在本地开发机器上使用IIS Express对抗SQLEXPRESS。
哦,这是Poll课程的关键(我尝试了DatabaseGenerated
属性没有运气):
[Key]
//[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
非常感谢任何帮助,甚至任何其他尝试。
答案 0 :(得分:2)
检查PollReppsitory中Context变量的声明。还要检查Components中的PollRepository属性。确保每次都返回相同的实例。
如果用于保存更改的Context实例不是用于插入的实例,则会看到这些结果。
您在Insert方法中检查了对象的状态。我会在Save方法中做同样的事情。如果实体在那里并且具有new状态,那么你可以排除我的假设,即插入和保存正在不同的上下文中执行。