该属性不是“类”类型的声明属性

时间:2012-11-02 11:21:17

标签: c# entity-framework ef-code-first

我收到错误The property 'Rank' is not a declared property on type 'MasterUser'. Verify that the property has not been explicitly excluded from the model by using the Ignore method or NotMappedAttribute data annotation. Make sure that it is a valid primitive property.我检查了我的模型类,它就在那里。

public class MasterUser
{
    //many other properties...
    public virtual char Rank { get; set; }
    //more properties below
}

我还检查了我的数据库上下文,它也在那里并完美映射。

public class BBDataContext : DbContext
{
    public DbSet<MasterUser> Users { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        #region MUSR_USRID mapping

        //Mapped properties above....
        modelBuilder.Entity<MasterUser>()
            .Property(usr => usr.Rank).HasColumnName("MUSR_RANK");
        //More mapped properties..

        modelBuilder.Entity<MasterUser>().ToTable("dbo.MUSR_FIL");
        #endregion

        base.OnModelCreating(modelBuilder);
    }
}

在表中,MUSR_RANK可以使用char数据类型为空。

我该如何解决这个问题?数据库对此有影响吗?我目前正在使用SQL Server 2000。

感谢您的帮助。

2 个答案:

答案 0 :(得分:6)

Primitive Data Types Supported in the Entity Data Model

所以你必须使用string代替char,我认为

并在OnModelCreating

中添加一些数据
modelBuilder.Entity<MasterUser>()
            .Property(usr => usr.Rank).HasColumnName("MUSR_RANK")
            .HasMaxLength(1)
            .IsFixedLength()
            .IsUnicode(false);

答案 1 :(得分:0)

当我找到此页面时,我遇到了同样的错误并正在寻求帮助。我知道这篇文章很旧,但由于我的解决方案不同,我发帖以防对其他人有所帮助。我正在使用 EF 6。

我的错误是因为我无意中将模型类的属性设为只读。

[Key]
[StringLength(10)]
public string ProjectNumber { get; }

EF 错误并不能很好地描述问题。一旦我添加了 set 访问器,错误就消失了。