109*_*793 59 c# linq-to-entities edmx
我有一个控制台应用程序,我想要做的是每次应用程序运行时,日期和时间都会发送到我的数据库中的表.
表结构如下:
FTPRuns
ID int
Last Run datetime
Run Code Online (Sandbox Code Playgroud)
很简单.
我已经在我的应用程序中更新了model.edmx以反映这个新的变化,但是现在我得到了以下错误,我不完全确定它意味着什么.
错误3002:从第1330行开始映射片段时出现问题:表FTPRuns的键(FTPRuns.ID)的潜在运行时违规:列(FTPRuns.ID)在概念方面映射到EntitySet FTPRuns的属性(FTPRuns.ID)但它们没有形成EntitySet的关键属性(FTPRuns.ID,FTPRuns.LastRun).
以下是我用来更新数据库的代码片段:
using (ModelContainer ctn = new ModelContainer())
{
try
{
FTPRun ftp = new FTPRun
{
LastRun = DateTime.Now
};
ctn.FTPRuns.AddObject(ftp);
int changes = ctn.SaveChanges();
Console.WriteLine(changes.ToString() + " Changes saved");
Console.WriteLine("The LastRun Date Has Been Updated");
}
catch (InvalidOperationException ex)
{
Console.WriteLine(ex.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
如果有人可以帮助我,我会非常感激:)
谢谢.
Dan*_*ner 95
您的实体模型具有两个属性的组合FTPRuns.ID和FTPRuns.LastRun实体键,而您的表只有列FTPRuns.ID作为主键.因此,在您的模型中,您指定组合FTPRuns.ID并且FTPRuns.LastRun必须是唯一的,而您的数据库具有更强的要求,即FTPRuns.ID单独必须是唯一的.
只需FTPRuns.LastRun从实体键中排除该属性即可.也许这是偶然发生的,或者实体框架无法从数据库中获取主要密钥信息,并且不得不推断实体密钥.例如,视图没有主键,实体框架会将实体键推断为所有非可空列的组合.
ben*_*bia 44
DanielBrückner解决方案非常适合我!下面基本上是他的指示,但是以图形形式 - 这可能有助于懒惰的读者:).
你想要注意的是你在模型中的PK即
我们可以看到我有一个PK叫id.现在,如果我看看我的EF模型:
我只能看到指定的1个键,这是正确的.对我来说,情况并非如此,所有4列都是键.
如果右键单击该列(在VS上的EF图表中),您将获得勾选/取消选中的选项 Entity Key:
确保这与您的模型匹配.在我的情况下,只id应勾选,保存和构建项目.
| 归档时间: |
|
| 查看次数: |
45394 次 |
| 最近记录: |