小编Pax*_*xxi的帖子

在.NET实体框架中调用SaveChanges时出现InvalidOperationException

我正在尝试学习如何使用实体框架,但我遇到了一个我无法解决的问题.我正在做的是,我正在浏览我拥有的电影列表,并将每个电影插入一个简单的数据库.

这是我正在使用的代码

private void AddMovies(DirectoryInfo dir)
{
    MovieEntities db = new MovieEntities();
    foreach (DirectoryInfo d in dir.GetDirectories())
    {
        Movie m = new Movie { Name = d.Name, Path = dir.FullName };
        db.AddToMovies(movie);
    }
    db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我在db.SaveChanges()读取了一个异常.

已成功提交对数据库的更改,但更新对象上下文时发生错误.ObjectContext可能处于不一致状态.内部异常消息:AcceptChanges无法继续,因为对象的键值与ObjectStateManager中的另一个对象冲突.在调用AcceptChanges之前,请确保键值是唯一的.

我无法找出造成这个问题的原因.我的数据库表包含三列
Id int autoincrement
Name nchar(255)
Path nchar(255)

更新:我检查了我的edmx文件,SSDL部分按照建议使用StoreGeneratedPattern ="Identity".我也跟着博客文章,试图在CSDL中添加ClientAutoGenerated ="true"和StoreGenerated ="true".这导致编译错误(错误5:不允许'ClientAutoGenerated'属性.).由于博客文章是从2006年开始的,并且它有一个后续帖子的链接,我认为它已被更改.

但是,我无法阅读后续帖子,因为它似乎需要一个msdn帐户.

.net c# entity-framework

14
推荐指数
3
解决办法
4万
查看次数

F#:警告FS0020:这个表达式应该有'unit'类型,但是类型'bool'

我试图通过解决一些欧拉问题来学习F#,我发现了一个我无法弄清楚的问题.这是我天真的解决方案.

let compute =
    let mutable f = false
    let mutable nr = 0
    while f = false do
        nr <- nr + 20
        f = checkMod nr
    nr
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我收到错误消息警告FS0020:该表达式应该具有类型'unit',但在表达式"nr < - nr +20"上具有类型'bool'.我已经尝试重写和移动表达式,我总是在while语句下面的行上得到错误.

我是用VS2010 Beta写的.

f# unit-type

3
推荐指数
2
解决办法
3440
查看次数

标签 统计

.net ×1

c# ×1

entity-framework ×1

f# ×1

unit-type ×1