0

EntityFrameworkがテーブルの1つに複合主キーを作成しないようにする方法を理解しようとしています。私は次の2つのエンティティを持っています:

public class Entry
{
   public Int64 EntryID { get; set; }
   public string UserName { get; set; }
   public string EntrySubject { get; set; }
}

public class Revision
{
   public Int64 RevisionID { get; set; }
   public string RevisionDescription { get; set; }

   public Int64 EntryID { get; set; }
   public Entry Entry { get; set; }
}

Entity Frameworkがデータベースを生成すると、RevisionsテーブルはRevisionIDとEntryIDで構成される複合主キーを取得します。Revisionsテーブルの主キーをRevisionIDのみにしたいのですが。それを行う方法はありますか?(違いが生じる場合は、SQLServerCEでEntityFramework4.3を使用しています。)

4

1 に答える 1

0

リビジョンクラスでキーデータ注釈を作成して、キーを明示的に定義できます。

public class Revision
{
   [Key]
   public Int64 RevisionID { get; set; }
   public string RevisionDescription { get; set; }

   public Int64 EntryID { get; set; }
   public Entry Entry { get; set; }
}

またはFluentを使用する:

modelBuilder.Entity<Revision>().HasKey(r=>r.RevisionID)

編集:テストアプリと図を追加

Keyアノテーションを使用してテストアプリを作成し、RevisionIDのみを含むRevisionsテーブルの主キーを使用して次のデータベースを作成しました

ここに画像の説明を入力してください

アプリ全体:

namespace ExampleCF
{
    public class Entry
    {
        public Int64 EntryID { get; set; }
        public string UserName { get; set; }
        public string EntrySubject { get; set; }
    }

    public class Revision
    {
        [Key]
        public Int64 RevisionID { get; set; }
        public string RevisionDescription { get; set; }

        public Int64 EntryID { get; set; }
        public Entry Entry { get; set; }
    }

    public class ItemContext : DbContext
    {
        public DbSet<Entry> Entrys { get; set; }
        public DbSet<Revision> Revisions { get; set; }

        protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
        {

        }
    }   

    class Program
    {
        public static void Main()
        {
        }

    }
}
于 2012-11-14T14:30:13.520 に答える