3

我正在尝试添加一些值以及尝试从我的数据库中删除选定的值。

我正在使用如下代码:

[HttpPost]
        public ActionResult SavePlaylist(List<ItemEditViewModel> content, long playlistid, List<long> deleted, string Title)
        {
            var playlist = db.Playlists.Include("PlaylistContents").FirstOrDefault(x => x.PlaylistId == playlistid);


            for (int i = 0; i < content.Count; i++)
            {
                var pc = new PlaylistContent();
                pc.Sequence = content[i].MetaID;
                playlist.PlaylistContents.Add(pc);
            }
            for (int i = 0; i < deleted.Count; i++)
            {
                long delid = deleted[i];
                ar remove = playlist.PlaylistContents.FirstOrDefault(x => x.PlaylistContentId.Equals(delid));
                playlist.PlaylistContents.Remove(remove);


            }
            db.SaveChanges();
            return JSON(playlist);

        }

值已成功添加但在从中删除值时,错误显示如下:

 The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted.

我能做些什么来解决这个错误。业务逻辑中是否存在任何类型的错误。

4

3 回答 3

2

以下代码从集合中删除对象:

playlist.PlaylistContents.Remove(remove);

但是,当您调用 SaveChanges 时,它会失败,因为 FK 列不可为空。为什么?因为 EF 没有删除该行,而是将 id 值设置为零。您需要删除该行,为此您可以执行以下操作:

db.PlaylistContents.Remove(remove); // this line removes the row from the database
playlist.PlaylistContents.Remove(remove); // this line removes the object form the collection
db.SaveChanges();
于 2014-05-28T21:51:46.183 回答
1

我解决了这个问题,类似于:

DataModel.PlayListContent.Remove(remove)
于 2013-11-21T13:59:44.990 回答
0

两个对象之间存在非 关系Optional,您可以将 添加Optional到映射中以启用为外键设置空值。

这个问题EF 4.1: .WithMany() 和 .WithOptional() 之间的区别?会有所帮助。

于 2013-05-29T06:15:53.760 回答