C# 我用EF 6实现外键的错误是什么?
我目前正在学习ASP.NETMVC5和EF6。现在,我一直在使用fluentapi声明一个外键,然后将数据植入声明的表中。 以下是我的代码: 型号: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; }
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; }
}