public class Subsidiary
{
public string Name { get; set; }
public virtual ICollection<Photo> Photos { get; set; }
}
public class Party
{
public string Name { get; set; }
public virtual ICollection<Photo> Photos { get; set; }
}
public class Photo
{
public string FileName { get; set; }
}
要生成数据库模式,请使用Fluent API。
public class PartyConfiguration : EntityTypeConfiguration<Party>
{
public PartyConfiguration()
{
HasMany(p => p.Photos).WithRequired().WillCascadeOnDelete();
}
}
public class SubsidiaryConfiguration : EntityTypeConfiguration<Subsidiary>
{
public SubsidiaryConfiguration()
{
HasMany(p => p.Photos).WithRequired().WillCascadeOnDelete();
}
}
所以我运行我的应用程序,出现以下错误
无法检查模型兼容性,因为数据库没有 包含模型元数据。确保IncludeMetadataConvention已经存在 添加到DbModelBuilder约定。
我需要为每个班级(Subsidiary
和Party
)生成一个新表。
在这种情况下,会创建一个表PartyPhotos
和SubsidiaryPhotos
。
如何使用EF FluentAPI进行此设置
谢谢大家的帮助
答案 0 :(得分:2)
尝试手动配置多对多配置。
public class PartyConfiguration : EntityTypeConfiguration<Party>
{
public PartyConfiguration()
{
HasMany(p => p.Photos).WithMany()
.Map(m =>
{
m.ToTable("PartyPhotos");
m.MapLeftKey("PartyId");
m.MapRightKey("PhotoId");
});
}
}
public class SubsidiaryConfiguration : EntityTypeConfiguration<Subsidiary>
{
public SubsidiaryConfiguration()
{
HasMany(p => p.Photos).WithMany()
.Map(m =>
{
m.ToTable("SubsidiaryPhotos");
m.MapLeftKey("SubsidiaryId");
m.MapRightKey("PhotoId");
});
}
}
答案 1 :(得分:0)
确保先删除数据库,然后重新运行项目。
更新:如何将此添加到源自DbContext
的类中protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
}