首页 > 解决方案 > {“无效的列名'SessionStatus_Id'。”}。列“Id”以表名为前缀?

问题描述

我有以下模型类。程序使用EF V6.2.0

public partial class SessionStatus
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public SessionStatus()
    {
        Sessions = new HashSet<Session>();
    }

    [Key]
    [Column("Id", TypeName ="TinyInt")] // No effect
    public byte Id { get; set; } // Becomes SessionStatus_Id for DB operations

    [Required]
    [StringLength(10)]
    public string Status { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Session> Sessions { get; set; }
}

Session类是

public partial class Session
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public Session()
    {
        SessionMessages = new HashSet<SessionMessage>();
    }

    [Key]
    public Guid Uid { get; set; }

    // ......

    public virtual SessionStatus SessionStatus { get; set; }
}

以及以下代码

        using (var ctx = new ProcessContext())
        {
            ctx.Sessions.Add(new Session { Uid = guid, //...... });
            ctx.SaveChanges();
        }

得到的错误

{"无效的列名 'SessionStatus_Id'。"}

数据库表SessionStatus的列名称为IdSessionStatus_Id表列SessionStatus_Id不存在)。为什么 EF 在列名前加上表名?连属性[Column("Id", TypeName ="TinyInt")]都没用?

标签: c#entity-frameworkado.netentity-framework-6

解决方案


尝试暂时更改名称而不是,Id您将得到答案...


推荐阅读