3

1 つのエンティティを Entity Framework の 2 つの異なるテーブルにマッピングするのに苦労しています。そのうちの 1 つはオプションであり、概要を簡単に説明できます。

コア テーブルであるメイン テーブルが 1 つあります。これは、社内の多くのアプリケーションで使用されているため、このテーブルを変更したくありません。

新しいアプリケーションでは、追加する機能の一部をサポートするために、さらにいくつかの列が必要でした。

これらの両方のテーブルに情報を保存する単一のエンティティ モデルを作成しました。これらの両方のテーブルにレコード (主キーと外部キーで関連付けられている) がある場合、正常に動作しています。

ただし、履歴レコードの場合、この新しいテーブルには関連付けられたレコードがなく、エンティティ セットを取得できません。

以下はコードスニペットです。

public class ModelTable
{
    public string PatientID { get; set; }

    public string Diagnosis1 { get; set; }

    public string Diagnosis2 { get; set; }

    public string Diagnosis3 { get; set; }

    public string Diagnosis4 { get; set; }

    public string Diagnosis5 { get; set; }

    public string Diagnosis6 { get; set; }

    public string Diagnosis7 { get; set; }

    public string Diagnosis8 { get; set; }
}

public class ModelTableMap : EntityTypeConfiguration<ModelTable>
{
    public ModelTableMap()
    {
        //Table1
        this.Map(model =>
        {
            model.Properties(table1 => new
            {
                table1.Diagnosis1,
                table1.Diagnosis2,
                table1.Diagnosis3,
                table1.Diagnosis4,
                table1.Diagnosis5,
                table1.Diagnosis6
            });
            model.ToTable("Table1");
        });
        //Optional Table
        this.Map(model =>
        {
            model.Properties(table2 => new
            {
                table2.Diagnosis7,
                table2.Diagnosis8,
            });
            model.ToTable("Table2");
        });

        this.HasKey(type => type.PatientID);
        this.Property(type => type.PatientID).IsRequired().HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

        this.Property(type => type.Diagnosis1).HasColumnName("Diag1");
        this.Property(type => type.Diagnosis1).HasColumnName("Diag2");
        this.Property(type => type.Diagnosis1).HasColumnName("Diag3");
        this.Property(type => type.Diagnosis1).HasColumnName("Diag4");
        this.Property(type => type.Diagnosis1).HasColumnName("Diag5");
        this.Property(type => type.Diagnosis1).HasColumnName("Diag6");
        this.Property(type => type.Diagnosis1).HasColumnName("Diag7");
        this.Property(type => type.Diagnosis1).HasColumnName("Diag8");
    }

}

これらのテーブルを 2 つの異なる POCO クラスに分割し、リレーションシップを指定すると、正常に機能します。

しかし、機能的には同じテーブルであるため、単一エンティティでこれを実現したいと考えています。

ガイダンスを提供してください、または私が間違っている場合は、私の英語がそれほど上手ではないことを明らかにしてください.

ありがとう

4

1 に答える 1

0

現在の EF バージョンでエンティティを分割するには、両方のテーブルにレコードが必要です。エンティティ分割を使用する場合は、最初のテーブルから既存のすべてのレコードに対して空のレコードを作成する必要があります。そうしないと、エンティティ分割を使用できません。

于 2013-04-11T12:40:34.443 に答える