以下是我的两个POCO:
[Table("Movie", Schema= "dbo")]
public class Movie: BaseClass
{
public string TitleName { get; set; }
public virtual ICollection<Actor> Actor{ get; set; }
}
[Table("Actor", Schema="dbo")]
public class Actor: BaseClass
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime? BirthDate { get; set; }
}
基类只是一个具有属性int id。
的类在数据库中,有一个Movie表和一个带有MovieActor表的Actor表,用作多对多关系表。目前,我只是想获得给定电影的所有演员。但是每当dbcontext尝试访问信息时,我都会遇到这种异常:
"InnerException = {"Invalid column name 'Movie_Id'.\r\nInvalid column name 'Movie_Id'.\r\nInvalid column name 'Movie_Id'."}"
我搜索了StackOverflow类似的问题,他们建议(对其他用户)使用外键,所以我在Actor集合前面创建了一个属性。
[ForeignKey("Actor")]
然后我又得到另一个例外:
The ForeignKeyAttribute on property 'Actor' on type
'Movie' is not valid. The foreign key name
'Actor' was not found on the dependent type
'Actor'.
The Name value should be a comma separated list of foreign key property names.
以前有人遇到过这个问题吗?
答案 0 :(得分:2)
EF 4.1 Code-First约定将在Movie
和Actor
之间创建一对多关系。由于您需要多对多关系,因此必须使用Fluent API进行配置:
public class MyContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Movie>()
.HasMany(m => m.Actor)
.WithMany()
.Map(a => {
a.MapLeftKey("MovieId"); // your PK column name in Movie table
a.MapRightKey("ActorId"); // your PK column name in Actor table
a.ToTable("MovieActor"); // your join table name
});
}
}
答案 1 :(得分:0)
请参阅this帖子以获取更多帮助。我认为这将有助于解释如何做到这一点。您必须向下滚动才能到达外键部分。它基本上说:
使用外键,它们可以在模型中公开或不公开。 当我说“暴露在模型中”时,这意味着还有一个额外的 依赖实体上的属性,即主体的值 实体。在下面的代码中,属性PrimaryCategoryCode是一个 暴露主要类别的外键。
public string PrimaryCategoryCode { get; set; } public virtual Category PrimaryCategory { get; set; }
要指明这一点,请使用PrimaryCategory上的ForeignKey属性 财产如下:
public string PrimaryCategoryCode { get; set; } [ForeignKey("PrimaryCategoryCode")] public virtual Category PrimaryCategory { get; set; }