1

これが私のコードです-最初に、Attachmentクラス:

    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; }
    }

BasicMedicalDataクラスは次のとおりです。

    public class BasicMedicalData{
    (..)
          public virtual ICollection<Attachment> Attachments { get; set; }
    }

ご覧のとおり、Attachmentオプションで 1 つの接続BasicMedicalDataオブジェクトを持つことができます。 多くのオブジェクトBasicMedicalDataを持つことができます。Attachments

これらの行で

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        (..)
        modelBuilder.Entity<Attachment>()
            .HasOptional(u => u.MedicalData)
            .WithMany()
            .HasForeignKey(u => u.BasicMedicalDataId);


        modelBuilder.Entity<Attachment>()
            .HasRequired(a => a.Author)
            .WithMany()
            .HasForeignKey(a => a.UserId);

    }

それは奇妙な移行を作成します:

    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);
    }

ここに問題があります。データベースBasicMedicalData_BasicMedicalDataIdに追加のフィールドが作成され、フィールドの遅延読み込みが無視されますBasicMedicalDataId

手動で ID を に入れるBasicMedicalData_BasicMedicalDataIdと、添付ファイルの遅延読み込みがうまく機能します。ただし、プロパティではないため、コードで値をここに入れることはできませんAttachments..

それを解決する方法は?異なる名前で同じフィールドを 2 つ作成するのはなぜですか? フィールドでの遅延読み込みがBasicMedicalDataIdうまくいかないのはなぜですか?

4

1 に答える 1

0

リレーションシップを optional:many に構成する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);

参考: オプションのWithManyメソッド

于 2013-10-29T09:38:06.607 に答える