2012-10-27 47 views
1

我來自網絡形式世界,我正在學習MVC4和實體框架5與代碼優先的方法。這是我第一次使用EF代碼,我很難理解EF需要從我那裏創建/更新數據庫。如何使用實體框架5(CodeFirst)與REST服務的DataContract

我正在向RESTful服務發出請求,並將響應反序列化爲DataContract。理想情況下,我希望能夠將這個DataContract插入到數據庫中,但我不確定如何從DataContract生成DbContext類,因此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. 是有一種方法可以從我的DataContract生成DbContext類,還是需要手動創建他們?
  2. 是否有更好的方法來使用(或真的保存到數據庫)反序列化的數據與實體框架(特別是EF5)?
  3. 有人可以提供一個鏈接,討論與DataContract一起使用的EF(4或更高版本)嗎?我想我可能沒有完全掌握如何有效使用EF5。

回答

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

+0

這是完美的,謝謝你的鏈接,他們正是我要找的:) – bflemi3