Asp.net mvc 3 EF延迟加载&;fluent API在表中创建附加字段

Asp.net mvc 3 EF延迟加载&;fluent API在表中创建附加字段,asp.net-mvc-3,entity-framework,lazy-loading,fluent,Asp.net Mvc 3,Entity Framework,Lazy Loading,Fluent,这是我的代码-首先,附件类: public class Attachment{ (...) public int UserId { get; set; } public virtual User Author { get; set; } public int? BasicMedicalDataId { get; set; } public virtual BasicMedicalData Medic

这是我的代码-首先,
附件
类:

    public class Attachment{
    (...)
          public int UserId { get; set; }
          public virtual User Author { get; set; }

          public int? BasicMedicalDataId { get; set; }
          public virtual BasicMedicalData MedicalData { get; set; }
    }
    public class BasicMedicalData{
    (..)
          public virtual ICollection<Attachment> Attachments { get; set; }
    }
以下是
BasicMedicalData
class:

    public class Attachment{
    (...)
          public int UserId { get; set; }
          public virtual User Author { get; set; }

          public int? BasicMedicalDataId { get; set; }
          public virtual BasicMedicalData MedicalData { get; set; }
    }
    public class BasicMedicalData{
    (..)
          public virtual ICollection<Attachment> Attachments { get; set; }
    }
它造成了奇怪的迁移:

    public override void Up()
    {
        CreateTable(
            "dbo.Attachments",
            c => new
                {
                    AttachmentId = c.Int(nullable: false, identity: true),
                    name = c.String(),
                    UserId = c.Int(nullable: false),
                    AddDate = c.DateTime(nullable: false),
                    BasicMedicalDataId = c.Int(),
                    del = c.Boolean(nullable: false),
                    BasicMedicalData_BasicMedicalDataId = c.Int(),
                })
            .PrimaryKey(t => t.AttachmentId)
            .ForeignKey("dbo.Users", t => t.UserId, cascadeDelete: true)
            .ForeignKey("dbo.PC_BasicMedicalData", t => t.BasicMedicalData_BasicMedicalDataId)
            .ForeignKey("dbo.PC_BasicMedicalData", t => t.BasicMedicalDataId)
            .Index(t => t.UserId)
            .Index(t => t.BasicMedicalData_BasicMedicalDataId)
            .Index(t => t.BasicMedicalDataId);
    }
问题就在这里-它在数据库
basicmedialdata\u basicmedialdataid
中创建了额外的字段,并在使用字段
basicmedialdataid
的延迟加载中忽略

当我将手动ID放入
BasicMedicalData\u BasicMedicalData
时,使用附件的延迟加载效果很好。但是我不能在这里用代码输入任何值,因为它不是
Attachments
属性


如何解决?为什么它会用不同的名称创建两个相同的字段?为什么使用字段
BasicMedicalDataId
的延迟加载不起作用?

您使用了
WithMany()
重载,将关系配置为可选:许多在关系的另一侧没有导航属性,但在关系的另一侧确实有导航属性

试试这个:

   modelBuilder.Entity<Attachment>()
      //Attachment has an optional relationship with MedicalData
      .HasOptional(u => u.MedicalData)
       //It is many:optional with a navigation property named Attachments  
      .WithMany(d => d.Attachments)
      //The dependent's foreign key is BasicMedicalDataId    
      .HasForeignKey(u => u.BasicMedicalDataId);
modelBuilder.Entity