【发布时间】:2015-05-28 08:35:52
【问题描述】:
Asp.Net WebApi 应用程序由以下类 Movie 和 Song 组成。 (一对多关系)
public class Movie : PropertyChangedBase //(Implementation of INotifyPropertyChanged)
{
public Movie()
{
Songs = new ObservableCollection<Song>();
}
private int? _id;
public int? Id
{
get { return _id; }
set
{
_id = value;
NotifyOfPropertyChange(() => Id);
}
}
private string _title;
public string Title
{
get { return _title; }
set
{
_title = value;
NotifyOfPropertyChange(() => Title);
}
}
private ICollection<Song> _songs;
public ICollection<Song> Songs
{
get { return _songs; }
set
{
_songs = value;
NotifyOfPropertyChange(() => Songs);
}
}
}
public class Song : PropertyChangedBase //(Implementation of INotifyPropertyChanged)
{
private int _id;
public int Id
{
get { return _id; }
set
{
_id = value;
NotifyOfPropertyChange(() => Id);
}
}
private string _title;
public string Title
{
get { return _title; }
set
{
_title = value;
NotifyOfPropertyChange(() => Title);
}
}
}
Web Api PUT 方法:
// PUT: api/Movie/5
[ResponseType(typeof(Movie))]
public IHttpActionResult PutMovie(int id, Movie movie)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (id != Movie.ID)
{
return BadRequest();
}
db.Entry(Movie).State = EntityState.Modified;
try
{
db.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
}
return Ok(movie);
}
创建新记录时,电影和歌曲集创建成功。 可以编辑(更新)电影类的值。
我正在调用 PutMovie 方法来更新现有记录。
问题: 1) 向现有收藏添加新歌曲时,没有更新任何更改。没有错误,但没有在 DB 中创建歌曲行。
2) 更新 Song 中的现有值时,没有更新任何更改。没有错误,但没有在 DB 中修改歌曲值。
注意:我正在使用 c# 客户端来使用 web api。
请帮我解决这个问题。
【问题讨论】:
-
您收到
DbUpdateConcurrencyException了吗?如果是这样,则说明您遇到了导致保存失败的问题。简单地放置一个空的 catch 来隐藏异常不会使保存神奇地成功...... -
对不起。我已经处理了异常,但我没有在上面的例子中包含代码。
标签: c# entity-framework rest asp.net-web-api put