2

これについてあなたの助けが必要です。選択を行うたびに、「無効な列名 'Discriminator'」というエラーが常に表示されます。奇妙なのは、マッピングまたはテーブルに Discriminator 列がないことです。[NotMapped]クラスにを追加しようとしました(ここで述べたように: EF Code First “Invalid column name 'Discriminator'” but no inheritance ) が役に立ちませんでした。

以下は、エラーを引き起こした私のコードです。

モデル

public class MasterUser : IAuditFields
{
    [Key]
    public string Username { get; set; }
    public string Name { get; set; }
    public string GroupID { get; set; }
    public string Status { get; set; }
    public string DeptID { get; set; }
    public string Rank { get; set; }

    public string CreatedBy { get; set; }

    [Required]
    public DateTime CreatedDate { get; set; }
    public string LastModifiedBy { get; set; }
    public DateTime? LastModifiedDate { get; set; }

    #region Relationships

    public UserAccess UserAccess { get; set; } // User needs to see what user access group he/she is in
    public UserAccessDetail UserAccessDetail { get; set; } //User needs to see what he/she can do
    #endregion
}

インターフェース

public interface IAuditFields
{
    string CreatedBy { get; set; }
    DateTime CreatedDate { get; set; }
    string LastModifiedBy { get; set; }
    DateTime? LastModifiedDate { get; set; }
}

構成クラス

public class MasterUserConfig : EntityTypeConfiguration<MasterUser>
{
    public MasterUserConfig()
    {
        Property(usr => usr.Username)
            .HasColumnName("UserName")
            .IsRequired();
        Property(usr => usr.Name).HasColumnName("Name");
        Property(usr => usr.GroupID).HasColumnName("GroupId");
        Property(usr => usr.Status).HasColumnName("Status");
        Property(usr => usr.DeptID).HasColumnName("DeptId");
        Property(usr => usr.Rank).HasColumnName("Rank");
        Property(usr => usr.CreatedBy).HasColumnName("CreatedBy");
        Property(usr => usr.CreatedDate).HasColumnName("CreatedDate");
        Property(usr => usr.LastModifiedBy).HasColumnName("LastModifiedBy");
        Property(usr => usr.LastModifiedDate).HasColumnName("LastModifiedDate");

        ToTable("dbo.Users");
    }

DataContext

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

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        try
        {
            modelBuilder.Configurations.Add(new MasterUserConfig());

            base.OnModelCreating(modelBuilder);
        }
        catch (Exception ex)
        {
            DiagnosticHelper.Message = ex.Message;
            DiagnosticHelper.InnerException = ex.InnerException.Message;
            DiagnosticHelper.StackTrace = ex.StackTrace;
            DiagnosticHelper.Instance.WriteError();
        }
    }
}

選択方法

    public MasterUser GetUserByUsername(string userName, string password)
    {
        try
        {
            return (_context.Users
                .Where(usr => usr.Username == userName && usr.Password == password && usr.Status == "ACTIVE"))
                .SingleOrDefault();
        }
        catch (Exception ex)
        {
            LogError(ex);
        }
        return null;
    }

あなたが私を助けてくれることを願っています。どうもありがとう!

4

1 に答える 1

1

少し異なる状況で同じエラーが発生しました。継承を使用していました。モデルクラスから到達できるすべてのテーブル/リンクがコンテキストによって構成されていることを確認することで、問題が修正されました。

あなたの場合、これは UserAccess および UserAccessDetail クラス (およびそれらから到達できるその他すべて) です。これらを OnModelCreating で構成してみてください。

于 2012-12-21T09:49:39.803 に答える