0

我试图弄清楚如何防止实体框架在我的一个表上创建复合主键。我有以下两个实体:

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。有没有办法做到这一点?(我将 Entity Framework 4.3 与 SQL Server CE 一起使用,如果这有所不同的话。)

4

1 回答 1

0

您可以在 Revision 类中创建Key Data Annotation,以显式定义您的密钥:

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

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

或使用流利:

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

编辑:添加了测试应用程序和图表

我创建了一个带有 Key 注释的测试应用程序,它创建了以下数据库,Revisions 表上的主键只有 RevisionID

在此处输入图像描述

整个应用程序:

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 回答