我试图找出如何阻止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,如果这有所不同。)
答案 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
应用程序的整体:
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()
{
}
}
}