【发布时间】:2015-08-28 08:36:27
【问题描述】:
我似乎无法理解 EF 如何处理复合键。当我尝试“添加迁移初始”时,以下代码返回“属性 'QuestionID' 不能用作实体 QuestionQuestionTypesModel 上的键属性,因为属性类型不是有效的键类型。只有标量类型、字符串和字节[] 是受支持的键类型。”
我还尝试设置注释而不是覆盖 OnModelCreating。我用 [Key, Column(Order = 0)]
谁能给我任何关于我做错了什么的线索?或者解释发生了什么以更好地理解手头的问题?
public class QuestionModel
{
[Key]
[HiddenInput(DisplayValue = false)]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public Guid ID { get; set; }
[Required]
[StringLength(250)]
public string Question { get; set; }
}
public class QuestionTypeModel
{
[Key]
[HiddenInput(DisplayValue = false)]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public Guid ID { get; set; }
[Required]
[StringLength(250)]
public string TypeName { get; set; }
}
public class QuestionQuestionTypesModel
{
public virtual QuestionModel QuestionID {get;set;}
public virtual QuestionTypeModel QuestionTypeID { get; set; }
}
public class InnuendoContext : DbContext
{
public IContext() : base("DefaultConnection")
{
}
public DbSet<QuestionTypeModel> QuestionTypes { get; set; }
public DbSet<QuestionModel> Questions { get; set; }
public DbSet<QuestionQuestionTypesModel> QuestionQuestionTypes { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Entity<QuestionQuestionTypesModel>().HasKey(a => new { a.QuestionID, a.QuestionTypeID });
}
}
【问题讨论】:
-
CModel中的A和B是什么? -
它们是表 A 和 B 的外键。
-
此示例代码无法编译。
A和B没有定义,除非你说出它们的确切含义。请使用工作代码更新您的示例。如果没有,我会要求结束这个问题。 -
我还是不明白为什么前面的代码不能编译。无论如何,我已经更新了代码。希望现在更清楚了。
-
你没有包含A类和B类,只有AModel和BModel
标签: c# entity-framework