Я использую Entity Framework 6.1.1. Мне нужно добавить дополнительное поле в таблицу соединений, которую я правильно создал с Fluent API. Я знаю, что это невозможно с Fluent API и что мне нужно создать класс модели, но проблема в том, что я не могу отобразить текущую конфигурацию api в классе модели сущности, не заканчивая тем, что отказываюсь от таблицы переходов, создавая его.Добавить дополнительную колонку в существующее отношение многих ко многим - EF Code First
У меня есть два класса моделей: Docente и Lezione.
public class Docente
{
public int Id { get; set; }
public string Nome { get; set; }
[Required]
public string Cognome { get; set; }
public virtual ICollection<Lezione> LezioniDocente { get; set; }
}
public class Lezione
{
public int Id { get; set; }
public string Programma { get; set; }
public virtual ICollection<Docente> LezioniDocente { get; set; }
}
И класс Configuration, который правильно устанавливает таблицу «LezioneDocente»:
public class LezioneConfiguration: EntityTypeConfiguration<Lezione>
{
public LezioneConfiguration()
{
ToTable("Lezioni");
Property(c => c.TS).IsRowVersion();
HasMany(d => d.LezioniDocente).WithMany(e => e.LezioniDocente).Map(
w => w.ToTable("LezioneDocente")
.MapLeftKey("LezioneId")
.MapRightKey("DocenteId")
);
}
}
Теперь у меня есть необходимость добавления дополнительного столбца в этой таблице (RuoloId), так что мне нужно, чтобы отобразить плавная конфигурация API для класса модели. Я пытаюсь сделать это, добавив новый класс модели и модификации Docente и Lezione класс для обозначения новой модели «LezioniDocente», например, так:
public class LezioneDocente
{
[Key, Column(Order = 0)]
public int LezioneId { get; set; }
[Key, Column(Order = 1)]
public int DocenteId { get; set; }
public int RuoloDocenteId { get; set; }
public virtual Docente Docente { get; set; }
public virtual Lezione Lezione { get; set; }
public virtual RuoloDocente RuoloDocente { get; set; }
}
public class Docente
{
public int Id { get; set; }
public string Nome { get; set; }
[Required]
public string Cognome { get; set; }
public virtual ICollection<LezioneDocente> LezioniDocente { get; set; }
}
public class Lezione
{
public int Id { get; set; }
public string Programma { get; set; }
public virtual ICollection<LezioneDocente> LezioniDocente { get; set; }
}
public class LezioneDocenteConfiguration : EntityTypeConfiguration<LezioneDocente>
{
public LezioneDocenteConfiguration()
{
HasRequired(_ => _.Lezione)
.WithMany(_ => _.LezioniDocente)
.HasForeignKey(_ => _.LezioneId);
HasRequired(_ => _.Docente)
.WithMany(_ => _.LezioniDocente)
.HasForeignKey(_ => _.DocenteId);
ToTable("LezioneDocente");
}
}
Когда я добавляю новую миграцию, чтобы отразить изменения, которые неизбежно называет DropTable на столе LezioneDocente.
public partial class test : DbMigration
{
public override void Up()
{
DropForeignKey("dbo.LezioneDocente", "LezioneId", "dbo.Lezioni");
DropForeignKey("dbo.LezioneDocente", "DocenteId", "dbo.Docenti");
DropIndex("dbo.LezioneDocente", new[] { "LezioneId" });
DropIndex("dbo.LezioneDocente", new[] { "DocenteId" });
CreateTable(
"dbo.LezioneDocente",
c => new
{
LezioneId = c.Int(nullable: false),
DocenteId = c.Int(nullable: false),
})
.PrimaryKey(t => new { t.LezioneId, t.DocenteId })
.ForeignKey("dbo.Docenti", t => t.DocenteId, cascadeDelete: true)
.ForeignKey("dbo.Lezioni", t => t.LezioneId, cascadeDelete: true)
.Index(t => t.DocenteId)
.Index(t => t.LezioneId);
DropTable("dbo.LezioneDocente");
}
}
Я что-то не хватает? Как я могу сопоставить текущую связь API с классом модели, не отбрасывая существующую таблицу? Я также попытался написать класс LezioneDocente, не указав новый столбец, но он все равно прекращает работу с таблицей.
Привет Колин, спасибо за ваш ответ. Да ты прав. Код миграции, о котором я сообщал, состоит в том, что я ссылаюсь на свою попытку написать класс LezioneDocente без добавления дополнительных полей. Я изменил код миграции в соответствии с вашим предложением, и он сработал. Вызывает разочарование, что мы не можем указывать на свободный API для сопоставления с существующей таблицей. – Silvia