VS解决方案之外的“EntityType没有键定义”错误

时间:2015-11-06 12:43:26

标签: c# entity-framework

我目前拥有一个使用Entity Framework的其他人制作的VS解决方案。该解决方案包括一个控制台应用程序,用于测试运行良好的主要功能。

但是,如果我尝试在我自己的VS解决方案中调用这些主要功能(使用dll引用),则会出现以下错误消息:

  

ConsoleApplication1.Persistence.FileTemplateModel:EntityType   'FileTemplateModel'没有定义键。为此定义密钥   的EntityType。

我通过互联网搜索,我发现这个看起来非常相似: EntityType 'IdentityUserLogin' has no key defined. Define the key for this EntityType

然而,由于控制台应用程序定义了一个继承继承DbContext的FrameworkDbContext的TestContext,因此它似乎是别的东西。

public partial class FrameworkDbContext : DbContext
{
        public FrameworkDbContext(): base("DefaultConnection")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {


public class TestContext : FrameworkDbContext
{
        public override UserModel CurrentUser
        {
            get
            {
                if (_currentUser == null)
                {

修改 VS解决方案中的FileTemplateModel(由其他人制作)已经声明哪个属性是主键:

[Table("File.Template", Schema = "Template")]
public class FileTemplateModel : _Auditable
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    [HiddenInput(DisplayValue = false)]
    public int FileTemplateId { get; set; }

    [Required]
    [Display(Name = "Type")]
    public int FileTemplateTypeId { get; set; }
    [ForeignKey("FileTemplateTypeId")]
    public virtual FileTemplateTypeModel FileTemplateType { get; set; }

    [Required]
    [Display(Name = "Name")]
    public string Name { get; set; }

事实上,正如我已经提到的,如果我运行控制台应用程序测试包含VS解决方案,一切正常,这意味着FileTemplateModel被正确声明。 问题是当我尝试在一个完全分离的VS解决方案中构建我自己的控制台应用程序时。

GOT IT: 好吧,似乎模型的注释以某种方式丢失了。 所以我决定先在OnModelCreating:

强制使用代码
modelBuilder.Entity<FileTemplateModel>().HasKey(x => x.FileTemplateId);

现在一切正常,但我想知道:为什么FileTemplateModel模型上的那些注释不足以定义主键?

0 个答案:

没有答案