1

我来自网络表单世界,我正在使用代码优先方法学习 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);
}

我的问题是...

  1. 有没有办法DbContext从我的类中生成类,DataContract还是我需要手动创建它们?
  2. 是否有更好的方法来使用(或真正保存到数据库)反序列化数据与实体框架(尤其是 EF5)?
  3. 有人可以提供一个链接来讨论与 DataContract 一起使用的 EF(4 或更高版本)吗?我想我可能没有完全掌握如何有效使用 EF5。
4

1 回答 1

3

您是否尝试过将数据合约提供给 DBSet,就像在开始一个普通的代码优先项目时一样?

public class ProductContext : DbContext

{

    public DbSet<Category> Categories { get; set; }

    public DbSet<Product> Products { get; set; }

}

EF 应该忽略现有属性并创建一些实体。

有关如何使用 DataContext 的一个很好的示例,请参阅这篇文章:http: //msdn.microsoft.com/en-us/jj729737

由于您是 EF 新手,不妨从这里开始:http: //msdn.microsoft.com/en-us/ee712907

于 2012-10-27T04:47:07.833 回答