/// <summary>
        /// 专辑文档添加
        /// 被引用:AdminController.LibIndex:Post
        /// </summary>
        /// <param name="guidArr">文章Guid数组</param>
        /// <param name="newAlbId">专辑ID</param>
        public static void DocAddToAlb(string[] guidArr, int newAlbId)
        {
            using (var db = new WEBVODEntities())
            {
                for (int i = 0; i < guidArr.Length; i++)
                {
                    LibAlbumDoc albumDoc = new LibAlbumDoc();
                    albumDoc.LibGuid = guidArr[i];
                    albumDoc.AlbumId = newAlbId;
                    albumDoc.PubDate = DateTime.Now;
                    albumDoc.LoginName = "admin";          //!!!用户名,以后要修改的。
                    db.LibAlbumDoc.AddObject(albumDoc);
                }
                db.SaveChanges();  //在这里就错误了。
            }        }错误信息:INSERT 语句与 FOREIGN KEY 约束"FK_LibAlbumDoc_Library"冲突。该冲突发生于数据库"WEBVOD",表"dbo.Library", column 'Guid'。
语句已终止。说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.SqlClient.SqlException: INSERT 语句与 FOREIGN KEY 约束"FK_LibAlbumDoc_Library"冲突。该冲突发生于数据库"WEBVOD",表"dbo.Library", column 'Guid'。
语句已终止。源错误: 
行 407:                    db.LibAlbumDoc.AddObject(albumDoc);
行 408:                }
行 409:                db.SaveChanges();
行 410:            }
行 411:源文件: F:\win2008iis\BYVOD\Models\LibraryBLL.cs    行: 409 

解决方案 »

  1.   

    你的数据库表的id是guid类型,而程序传入的参数是string类型,未经转换成guid类型就传入了,造成错误。
    以上仅仅是一种可能,具体要看你的程序是怎么写的了
      

  2.   

    我添加的数据就是从主键表取出来的,约束应该没问题啊?   下边是跟踪器里的
    exec sp_executesql N'insert [dbo].[LibAlbumDoc]([AlbumId], [LibGuid], [LoginName], [PubDate], [Title], [CategoryID], [Approved], [CategoryCN], [VirDir])
    values (@0, @1, @2, @3, null, null, null, null, null)
    select [Id]
    from [dbo].[LibAlbumDoc]
    where @@ROWCOUNT > 0 and [AlbumId] = @0 and [LibGuid] = @1',N'@0 int,@1 nvarchar(100),@2 nvarchar(50),@3 datetime2(7)',@0=12,@1=N'''0c11ce1b-6bf1-40e7-955f-f4387388ecea''',@2=N'admin',@3='2013-02-27 13:07:09.6471548'
      

  3.   


    主键表 外键表 都是用的 nvarchar(100)
      

  4.   

    哦哟,你的sql写错了,取数据的部分。因为没取到,所以为空,所以外键错误。仔细看你贴出来的倒数3行,又是一个自己拼接sql的吧,引号多打了
      

  5.   


    不是手写的sql,是跟踪器自动生成的
      

  6.   

    是不是因为  LibGuid 即是主键之一,也是外键的原因?
      

  7.   

    我不是帮你已经把问题找出来了吗,sql语句写错了啊
      

  8.   

    你的跟踪器里的sql语句哪里来的啊,还不是你自己写的嘛。你找到写的地方,自己找错去啊
      

  9.   


    我没有写sql语句,那是sql server2008 profiler 里边跟踪出来。
      

  10.   

    唉,我知道你用的是ef。那你这个先取数据再写入的逻辑是在哪里配置出来的呢?你不能把错误归咎于ef啊,ef是按你制定的某个逻辑来执行。现在发现sql错了,不是手写的sql,那就是某个ef的逻辑写错了,自己再好好找找吧。比如,先生成的ef配置信息,之后又更新了数据库结构,却未更新ef配置,当然这只是举例。祝你成功。
      

  11.   

    貌似你的实体都是设计出来的啊?
    LZ去看看EF的CodeFirst吧
    用CodeFirst生成的数据库不会出这种低级问题