1

レガシー データベースに次のテーブルがあります。

データ dataid PK、年、番号

data_1 dataid PK、note_1、完了

data_2 dataid PK、note_2、タイプ、オブジェクト

data_other dataid PK, note_other, a, b, c

私のモデルクラスは次のようになります。

public class Data
{
    public int DataID { get; set; }
    public int Year { get; set; }
    public int Number { get; set; }
}

public class Data1
{
    public int DataID { get; set; }
    public int Note1{ get; set; }
    public int Completed { get; set; }
}

public class Data1
{
    public int DataID { get; set; }
    public int Note2 { get; set; }
    public string Type { get; set; }
    public string Object { get; set; }
}

public class DataOther
{
    public int DataID { get; set; }
    public int NoteOther { get; set; }
    public string A { get; set; }
    public string B { get; set; }
    public string C { get; set; }
}
    public DbSet<Data> Datas { get; set; }
    public DbSet<Data1> Data1s { get; set; }
    public DbSet<Data2> Data2s { get; set; }
    public DbSet<DataOther> DataOthers { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
            modelBuilder.Entity<Data>().ToTable("data");
            modelBuilder.Entity<Data>().HasKey(t => t.DataID);

            modelBuilder.Entity<Data1>().ToTable("data_1");
            modelBuilder.Entity<Data1>().HasKey(t => t.DataID);

            modelBuilder.Entity<Data2>().ToTable("data_2");
            modelBuilder.Entity<Data2>().HasKey(t => t.DataID);

            modelBuilder.Entity<DataOther>().ToTable("data_other");
            modelBuilder.Entity<DataOther>().HasKey(t => t.DataID);
    }

チュートリアルやブログからさまざまな解決策を試しましたが、実現できないようです。

modelBuilder.Entity<Data>()
    .HasRequired(a => a)
    .WithMany()
    .HasForeignKey(a => a);

私が見ている問題は、主キーしかなく、外部キーがないことです。私はMVC3とEntity Framework 5を使用しています。私が望むのは、たとえば@Model.Datas.Others.NoteOtherのビューでのみ実行することです

しかし、これらのテーブル間の関係を作成する方法に関するヒントは素晴らしいです!

4

1 に答える 1

0

複数の 1:0..1 関係が必要なようです。

これをマッピングするには、まずクラス内の実際の関係をマッピングする必要があります:

public class Data
{
    public int DataID { get; set; }
    public int Year { get; set; }
    public int Number { get; set; }

    public Data1 Data1 { get; set; }
    public Data2 Data2 { get; set; }
    public DataOther DataOther { get; set; }
}

次に、fluent を使用して関係を定義します。

        modelBuilder.Entity<Data>().HasOptional(d => d.Data1)
            .WithRequired();
        modelBuilder.Entity<Data>().HasOptional(d => d.Data2)
            .WithRequired();
        modelBuilder.Entity<Data>().HasOptional(d => d.DataOther)
            .WithRequired();

これにより、このデータベースが作成されました。

ここに画像の説明を入力

于 2012-09-18T12:49:15.497 に答える