2013-04-16 3 views
0

У меня возникли проблемы с удалением объектов в EF Code First (новая БД) без нарушения ограничения внешнего ключа.Код Первое нарушение ограничений

У меня есть три класса, Job, Ticket и Notes. У задания есть 0,1 Билета и много заметок. Я хотел бы удалить работу (и ее реактивный билет/заметки) с помощью db.Job.Remove (job), но это приводит к нарушению FK между Job и Ticket. Как мне структурировать/аннотировать классы?

Заранее спасибо.
Следующий фрагмент кода определяет объекты/отношения:

public WorkflowEntities() : base("CodeFirstWorkflow") { } 

    public DbSet<Job> Job { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) { 
     base.OnModelCreating(modelBuilder); 

     // Should create a 1:0,1 between Job and Ticket with ticket being optional 
     modelBuilder.Entity<Ticket>() 
      .HasRequired(e => e.Job) 
      .WithOptional(e => e.Ticket); 
    } 
} 

public class Job { 
    public int JobId { get; set; } 

    public virtual Ticket Ticket { get; set; } 
    public virtual ICollection<Notes> Notes { get; set; } 
} 

public class Ticket { 
    public int TicketId { get; set; } 
    public int JobId { get; set; } 

    public virtual Job Job { get; set; } 
} 

public class Notes { 
    public int NotesId { get; set; } 
    public int JobId { get; set; } 

    public virtual Job Job { get; set; } 
} 

ответ

0

Настройка этого с Job стороны:

modelBuilder.Entity<Job>() 
.HasMany(p => p.Ticket) 
.WithRequired() 
.HasForeignKey(c => c.JobId) 
.WillCascadeOnDelete(true); 
+0

Спасибо. Я изменил ваше решение, потому что у моей работы могут быть только 1 (или 0) билеты. Раствор: modelBuilder.Entity () .HasOptional (р => p.Ticket) .WithRequired() .WillCascadeOnDelete (истина); – bob

Смежные вопросы