Asp.net mvc 实体框架和一对零到零(?)连接

Asp.net mvc 实体框架和一对零到零(?)连接,asp.net-mvc,entity-framework,entity-framework-4,Asp.net Mvc,Entity Framework,Entity Framework 4,当两种依赖表有时必须一起工作时,我遇到了一个有趣的情况 例如: 当两个人从不同的部门带来数据时,一台机器,第二台关于引擎,不知道哪个引擎会去哪个机器,反之亦然。这些表之间的关系是引擎有可选的机器,而机器有可选的引擎。您应该如何看待这些表之间的关系 型号: public class Machine{ [Key] [ScaffoldColumn(false)] public virtual int MachineId { get; set; } public st

当两种依赖表有时必须一起工作时,我遇到了一个有趣的情况

例如:

当两个人从不同的部门带来数据时,一台机器,第二台关于引擎,不知道哪个引擎会去哪个机器,反之亦然。这些表之间的关系是引擎有可选的机器,而机器有可选的引擎。您应该如何看待这些表之间的关系

型号:

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().has可选(p=>p.Machine)???
modelBuilder.Entity().HasOptional(p=>p.MachineEngine)??
谢谢你的帮助。
Andrzej

如果
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);
modelBuilder.Entity()
.has可选(p=>p.MachineEngine)
.有很多
.HasForeignKey(entity=>entity.MetrykiEnginedD);
modelBuilder.Entity()
.has可选(p=>p.Machine)
.有很多
.HasForeignKey(entity=>entity.MachineId);

假设1“MachineEngine”只能属于0或1“Machine”, 1“Machine”只能有0或1“MachineEngine”,我相信您可以按如下方式配置它

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

        base.OnModelCreating(modelBuilder);
    }
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().has可选(x=>x.MachineEngine).WithOptionalDependent();
基于模型创建(modelBuilder);
}
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Machine>().HasOptional(x => x.MachineEngine).WithOptionalDependent();

        base.OnModelCreating(modelBuilder);
    }