ICollection <Photo>генерировать разные таблицы для разных классов? - PullRequest
0 голосов
/ 30 января 2012

Код

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

Error

Итак, я запускаю свое приложение, появляется следующая ошибка

Совместимость модели не может быть проверена, поскольку база данных не содержать метаданные модели. Убедитесь, что IncludeMetadataConvention была добавлено в соглашения DbModelBuilder.

Задача

Мне нужно для каждого класса (Subsidiary и Party) сгенерировать новую таблицу. В этом случае будут созданы таблицы PartyPhotos и SubsidiaryPhotos.

Как выполнить эту настройку с EF FluentAPI ??

Спасибо всем за помощь

Ответы [ 2 ]

2 голосов
/ 30 января 2012

Попробуйте настроить конфигурацию «многие ко многим» вручную.

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");
          });
    }
}
0 голосов
/ 30 января 2012

Убедитесь, что вы сначала удалили базу данных, а затем повторно запустили проект.

Обновление: как насчет добавления этого в ваш класс, производный от DbContext

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{
    modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
}
...