Пользовательское сопоставление «многие ко многим» с CodeFirst - PullRequest
0 голосов
/ 09 октября 2011

Начните использовать CodeFirst в моих проектах MVC и возникли проблемы.У меня есть база данных с некоторой предопределенной схемой.Есть несколько таблиц:

[Persons]
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](30) NOT NULL,
[Birthday] [datetime] NOT NULL,
[Address] [nvarchar](30) NOT NULL,
[Zip] [nvarchar](5) NOT NULL,
[City] [nvarchar](30) NOT NULL,
[Tax] [money] NOT NULL,
[Memo] [varbinary](max) NULL

[Seminars]
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](20) NOT NULL

и таблица «многие ко многим»

[QualRef]
[SemID] [bigint] NOT NULL,
[RefID] [bigint] NOT NULL

, где SemID ссылается на Seminars.ID, а RefID ссылается на Persons.ID

Я пытаюсь исправить привязку схемы CodeFirst с помощью класса конфигурации:

class PersonConfiguration : EntityTypeConfiguration<Person>
    {
        internal PersonConfiguration()
        {
            this.HasMany(i => i.Seminars)
                .WithMany(c => c.Persons)
                .Map(mc =>
                {
                    mc.MapLeftKey("SemID");
                    mc.MapRightKey("RefID");
                    mc.ToTable("QualRef");
                });
        }
    }

и зарегистрировать ее с этим кодом:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Person>().ToTable("Persons");
        base.OnModelCreating(modelBuilder);
        modelBuilder.Configurations.Add(new PersonConfiguration());
    }

Но когда я запускаю приложение с использованием этих моделейпроизошла ошибка - CodeFirst пытается найти некоторую таблицу "dbo.People" (?!), и она не существует (ожидается).Спасибо за хорошие ответы!

1 Ответ

1 голос
/ 09 октября 2011

Попробуйте изменить код следующим образом:

class PersonConfiguration : EntityTypeConfiguration<Person>
    {
        public PersonConfiguration()
        {
            ToTable("Persons");

            this.HasMany(i => i.Seminars)
                .WithMany(c => c.Persons)
                .Map(mc =>
                {
                    mc.MapLeftKey("SemID");
                    mc.MapRightKey("RefID");
                    mc.ToTable("QualRef");
                });
        }
    }

// ...

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {


            modelBuilder.Configurations.Add(new PersonConfiguration());
            base.OnModelCreating(modelBuilder);
        }
...