阻止实体框架创建复合主键

时间:2012-11-14 14:20:33

标签: entity-framework

我试图找出如何阻止Entity Framework在我的一个表上创建复合主键。我有以下两个实体:

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

1 个答案:

答案 0 :(得分:0)

您可以在Revision类中创建Key数据注释,以明确定义您的密钥:

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注释的测试应用程序,它创建了以下数据库,在Revisions表上只有一个主键,只有RevisionID

enter image description here

应用程序的整体:

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()
        {
        }

    }
}