我来自网络表单世界,我正在使用代码优先方法学习 MVC4 和 Entity Framework 5。这是我第一次使用 EF 代码优先,我无法理解 EF 需要我什么才能创建/更新数据库。
我正在向 RESTful 服务发出请求并将响应反序列化为DataContract
. 理想情况下,我希望能够将其插入DataContract
到数据库中,但我不确定如何从中生成DbContext
类,DataContract
以便 EF 可以做到这一点。
简化版的DataContract
...
[DataContract]
public class MoviesDataContract {
[DataMember(Name = "total")]
public int Total { get; set; }
[DataMember(Name = "movies")]
public IEnumerable<Movie> Movies { get; set; }
[DataMember(Name = "link_template")]
public string LinkTemplate { get; set; }
}
[DataContract]
public class Movie {
[DataMember(Name = "id")]
public int Id { get; set; }
[DataMember(Name = "title")]
public string Title { get; set; }
[IgnoreDataMember]
public int? Year {
get {
int i;
return int.TryParse(_year, out i) ? i : (int?)null;
}
set { _year = value.ToString(); }
}
[DataMember(Name = "year")]
private string _year { get; set; }
}
这是一个DataContract
用法示例...
using(var response = (HttpWebResponse)request.GetResponse()) {
var serializer = new DataContractJsonSerializer(typeof (MoviesDataContract));
var dataContract = (MoviesDataContract)serializer.ReadObject(response.GetResponseStream());
var model = new List<MovieViewModel>();
dataContract.Movies.ToList().ForEach(movie => model.Add(new MovieViewModel {
Title = movie.Title,
Year = movie.Year
}));
// MovieDbContext doesn't exist and it's what I'm unsure of how to generate
// I would think it would work something like this though (once created)
var db = new MovieDbContext();
db.Add(dataContext);
db.SaveChanges();
return View(model);
}
我的问题是...
- 有没有办法
DbContext
从我的类中生成类,DataContract
还是我需要手动创建它们? - 是否有更好的方法来使用(或真正保存到数据库)反序列化数据与实体框架(尤其是 EF5)?
- 有人可以提供一个链接来讨论与 DataContract 一起使用的 EF(4 或更高版本)吗?我想我可能没有完全掌握如何有效使用 EF5。