在Entity Framework Core中添加實體圖

.net c# entity-framework entity-framework-core

我已經使用EF Core 1.1.0的代碼優先方法在我的SQL數據庫中創建我的實體。

我的一些實體具有其他實體的導航屬性(一對一或一對多)。

問題是,當我嘗試添加具有導航屬性的實體時,根實體已成功添加,但相關實體未成功添加。

以下是代碼:

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();
}

電影將與其所有字段一起添加到數據庫中,但Genres和Cast不存在(空值)。

我已經設置了我的代碼優先方法:

Add-Migration Initial

Update-Database

我錯過了什麼?我很確定這段代碼適用於EF6。

一般承認的答案

我已經弄清楚了。實際上,這是EF Core中AddAsync方法的一個已知錯誤。非異步Add方法按預期工作。

看到這裡



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow