Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我用EF 6实现外键的错误是什么?_C#_Entity Framework - Fatal编程技术网

C# 我用EF 6实现外键的错误是什么?

C# 我用EF 6实现外键的错误是什么?,c#,entity-framework,C#,Entity Framework,我目前正在学习ASP.NETMVC5和EF6。现在,我一直在使用fluentapi声明一个外键,然后将数据植入声明的表中。 以下是我的代码: 型号: public class Person { public int Id { get; set; } public ICollection<Anime> DirectedAnimes { get; set; } } public class Anime { public int Id { get; set; }

我目前正在学习ASP.NETMVC5和EF6。现在,我一直在使用fluentapi声明一个外键,然后将数据植入声明的表中。 以下是我的代码:

型号:

public class Person
{
    public int Id { get; set; }
    public ICollection<Anime> DirectedAnimes { get; set; }
}

public class Anime
{
    public int Id { get; set; }
    public int DirectorId { get; set; }
    public Person Director { get; set; }
}


public class AnimeDbContext : DbContext
{
    public DbSet<Person> Persons { get; set; }
    public DbSet<Anime> Animes { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Anime>()
            .HasRequired(a => a.Director)
            .WithMany(p => p.DirectedAnimes)
            .HasForeignKey(p => p.DirectorId);
        base.OnModelCreating(modelBuilder);
    }
}
public class AnimeInitializer : DropCreateDatabaseAlways<AnimeDbContext>
{
    protected override void Seed(AnimeDbContext context)
    {   
        var persons = new List<Person>
        {
            new Person { Id = 1 },
            new Person { Id = 2 }
        };
        var animes = new List<Anime>
        {
            new Anime { DirectorId = 1 },
            new Anime { DirectorId = 2 }
        };
        persons.ForEach(p => context.Persons.Add(p));
        context.SaveChanges();
        animes.ForEach(a => context.Animes.Add(a));
        context.SaveChanges();
    }
}
但实体框架知道外键,因为在
Seed
方法中添加
newanime{DirectorId=3}
会导致运行时错误


我很确定我的错误是非常愚蠢的,是由于我没有准确地遵循示例造成的,但我已经为这个问题挣扎了一段时间,仍然无法解决它。非常感谢您的帮助。

您的导航属性不是虚拟的,因此无法被DynamicProxy覆盖

更改如下:

public class Person
{
    public int Id { get; set; }
    public virtual ICollection<Anime> DirectedAnimes { get; set; }
}

public class Anime
{
    public int Id { get; set; }
    public int DirectorId { get; set; }
    public virtual Person Director { get; set; }
}
公共类人物
{
公共int Id{get;set;}
公共虚拟ICollection定向动画{get;set;}
}
公共级动画
{
公共int Id{get;set;}
public int DirectorId{get;set;}
公共虚拟人控制器{get;set;}
}

谢谢,这确实是一个愚蠢的错误,因为没有遵循示例。添加虚拟帮助了我。
public class Person
{
    public int Id { get; set; }
    public virtual ICollection<Anime> DirectedAnimes { get; set; }
}

public class Anime
{
    public int Id { get; set; }
    public int DirectorId { get; set; }
    public virtual Person Director { get; set; }
}