2017-03-03 7 views
2

私はSQLデータベースにエンティティを作成するためにEF Core 1.1.0でコードファーストアプローチを使用しました。Entity Frameworkコアのエンティティのグラフを追加します

一部のエンティティは、他のエンティティ(1対1または1対多)に対してナビゲーションプロパティを持ちます。

ナビゲーションプロパティを持つエンティティを追加しようとすると、ルートエンティティは正常に追加されますが、関連するエンティティは追加されません。私は映画は次のように挿入すると

public class PopcornContext : DbContext 
{ 
    public PopcornContext(DbContextOptions<PopcornContext> options) 
     : base(options) 
    { 
    } 

    public virtual DbSet<Movie> MovieSet { get; set; } 
} 

public partial class Movie 
{ 
    public Movie() 
    { 
     this.Genres = new HashSet<Genre>(); 
     this.Cast = new HashSet<Cast>(); 
    } 

    public int Id { get; set; } 
    public string Url { get; set; } 
    public string ImdbCode { get; set; } 
    public string Title { get; set; } 
    public string TitleLong { get; set; } 
    public string Slug { get; set; } 
    public int Year { get; set; } 

    public virtual ICollection<Genre> Genres { get; set; } 
    public virtual ICollection<Cast> Cast { get; set; } 
} 

public class PopcornContextFactory : IDbContextFactory<PopcornContext> 
{ 
    public PopcornContext Create(DbContextFactoryOptions options) 
    { 
     var builder = new ConfigurationBuilder() 
      .AddJsonFile("appsettings.json"); 
     var configuration = builder.Build(); 

     var optionsBuilder = new DbContextOptionsBuilder<PopcornContext>(); 
     optionsBuilder.UseSqlServer(configuration["SQL:ConnectionString"]); 

     return new PopcornContext(optionsBuilder.Options); 
    } 
} 

:ここ

は、以下のコードである

using (var context = new PopcornContextFactory().Create(new DbContextFactoryOptions())) 
{ 
    var movie = new Database.Movie 
    { 
     ImdbCode = movieJson.ImdbCode, 
     TitleLong = movieJson.TitleLong, 
     Year = movieJson.Year, 
     Cast = movieJson.Cast.Select(cast => new Database.Cast 
     { 
      ImdbCode = cast?.ImdbCode, 
      SmallImage = cast?.SmallImage, 
      CharacterName = cast?.CharacterName, 
      Name = cast?.Name 
     }).ToList(), 
     Genres = movieJson.Genres.Select(genre => new Database.Genre 
     { 
      Name = genre 
     }).ToList(), 
     Slug = movieJson.Slug, 
     Title = movieJson.Title, 
     Url = movieJson.Url 
    }; 

    await context.MovieSet.AddAsync(movie); 
    await context.SaveChangesAsync(); 
} 

映画は、そのすべてのフィールドを使用してデータベースに追加されますが、ジャンルや出演者ではありませんそこに(ヌル値)。

私は私のコードの最初のアプローチを設定している:私は何を逃した

Add-Migration Initial 

Update-Database 

?私はこのコードがEF6でも使えると確信しています。

答えて

0

私はそれを理解しました。実際には、EFコアにAddAsyncメソッドがある既知のバグです。非同期以外のAddメソッドは期待通りに機能します。

here

関連する問題