ICollection <photo>为不同的类生成不同的表?</photo>

时间:2012-01-29 23:43:56

标签: asp.net-mvc-3 entity-framework-4.1 fluent

代码

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约定。

问题

我需要为每个班级(SubsidiaryParty生成一个新表。 在这种情况下,会创建一个表PartyPhotosSubsidiaryPhotos

如何使用EF FluentAPI进行此设置

谢谢大家的帮助

2 个答案:

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