2013-02-26 4 views
0

У меня возникла интересная ситуация, когда иногда возникают два вида зависимых таблиц.Entity Framework и одно к нулю к нулю (?) Соединение

Пример:

Когда два человека из разных отделов, чтобы принести данные, одну машину, второй о двигателе, не знаю, какой двигатель будет идти на какие машины и наоборот. Связь между этими таблицами заключается в том, что у двигателя есть дополнительная машина, а машина имеет дополнительный двигатель. Как следует искать отношения между этими таблицами?

Модель:

public class Machine{ 

    [Key] 
    [ScaffoldColumn(false)] 
    public virtual int MachineId { get; set; } 

    public string MachineSerialNo { get; set; } 

    public virtual int? MetrykiEnginedD { get; set; } 
    public virtual MachineEngine MachineEngine { get; set; } 
} 

public class MachineEngine { 

    [Key] 
    [ScaffoldColumn(false)] 
    public virtual int MachineEngineId { get; set; } 

    public virtual string MachineEngineSN { get; set; } 

    public virtual int? MachineId { get; set; } 
    public virtual Machine Machine { get; set; } 
} 

Код:

modelBuilder.Entity<MachineEngine>().HasOptional(p => p.Machine) ??? 

modelBuilder.Entity<Machine>().HasOptional(p => p.MachineEngine) ?? 

Спасибо за вашу помощь. Анджей

ответ

0

Если MetrykiEnginedD должен быть внешним ключом, то:

modelBuilder.Entity<Machine>() 
        .HasOptional(p => p.MachineEngine) 
        .WithMany() 
        .HasForeignKey(entity => entity.MetrykiEnginedD); 
modelBuilder.Entity<MachineEngine>() 
        .HasOptional(p => p.Machine) 
        .WithMany() 
        .HasForeignKey(entity => entity.MachineId); 
0

Предполагая, что 1 'MachineEngine' может принадлежать только 0 или 1 'Machine', и 1 'машина' может иметь только 0 или 1 «MachineEngine» Я полагаю, что вы можете настроить его следующим образом:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Machine>().HasOptional(x => x.MachineEngine).WithOptionalDependent(); 

     base.OnModelCreating(modelBuilder); 
    } 
Смежные вопросы