EF-6 - Ungültige Spalte name 'Diskriminator', zwei DbContexts

Habe ich ein MVC 5 app. Ich würde gerne die standard-aspnet.identity provider zu ermöglichen, Benutzer-login über das standard - \Account Ansichten. Allerdings habe ich auch eine Verbindung zu einem Drittanbieter-Datenbank und verwenden möchten EF code-first-für das auch.

Den Kontext für meine Datenbank, die ich nahm aus einem Scott Allen Pluralsight. Ich weiß nicht, warum oder was der "ApplicationUser" - Klasse tut Erben von der IdentityUser aber es arbeitete in seinem video und mit einer früheren website, die ich erstellt. Es sieht wie folgt aus:

namespace ESBAMPortal.DataLayer
{
    //You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more.
    public class ApplicationUser : IdentityUser
    {
    }

    class PortalContext : IdentityDbContext<ApplicationUser>, ESBAMPortal.DataLayer.IPortalContext
    {
        public PortalContext()
            : base("ESBamPortalConString")
        {
            this.Configuration.LazyLoadingEnabled = false;
        }

        public virtual DbSet<DomainClasses.Portal> Portal {get; set;}
    }
}

Den Kontext für die third-party-Datenbank ist wie folgt:

namespace ESBAMPortal.DataLayer
{

    public class ESBContext : DbContext, ESBAMPortal.DataLayer.IESBContext
    {
        public ESBContext()
            : base("ESBExceptionConString")
        {
            this.Configuration.LazyLoadingEnabled = false;
        }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }

        public virtual DbSet<ActionType> ActionTypes { get; set; }
        public virtual DbSet<Alert> Alerts { get; set; }
        public virtual DbSet<AlertCondition> AlertConditions { get; set; }
        public virtual DbSet<AlertEmail> AlertEmails { get; set; }
        public virtual DbSet<AlertHistory> AlertHistories { get; set; }
        public virtual DbSet<AlertSubscription> AlertSubscriptions { get; set; }
        public virtual DbSet<AlertSubscriptionHistory> AlertSubscriptionHistories { get; set; }
        public virtual DbSet<AuditLog> AuditLogs { get; set; }
        public virtual DbSet<AuditLogMessageData> AuditLogMessageDatas { get; set; }
        public virtual DbSet<Batch> Batches { get; set; }
        public virtual DbSet<Configuration> Configurations { get; set; }
        public virtual DbSet<ContextProperty> ContextProperties { get; set; }
        public virtual DbSet<Fault> Faults { get; set; }
        public virtual DbSet<Message> Messages { get; set; }
        public virtual DbSet<MessageData> MessageDatas { get; set; }
        public virtual DbSet<ProcessedFault> ProcessedFaults { get; set; }
        public virtual DbSet<UserSetting> UserSettings { get; set; }
    }
}

Wenn ich die website, die ich bin in der Lage zu ziehen die Daten aus dem third-party-website ok. Jedoch, wenn ich versuche mich einzuloggen erhalte ich die Meldung:

Invalid column name 'Discriminator'

Dieser geworfen wird, als ein Ergebnis der Herstellung der Aufruf:

var user = await UserManager.FindAsync(model.UserName, model.Password);

Ausführung EF-Profiler kann ich sehen, dass er versucht, führen Sie die folgende SQL:

SELECT [Limit1].[C1]            AS [C1],
       [Limit1].[Id]            AS [Id],
       [Limit1].[UserName]      AS [UserName],
       [Limit1].[PasswordHash]  AS [PasswordHash],
       [Limit1].[SecurityStamp] AS [SecurityStamp]
FROM   (SELECT TOP (1) [Extent1].[Id]            AS [Id],
                       [Extent1].[UserName]      AS [UserName],
                       [Extent1].[PasswordHash]  AS [PasswordHash],
                       [Extent1].[SecurityStamp] AS [SecurityStamp],
                       '0X0X'                    AS [C1]
        FROM   [dbo].[AspNetUsers] AS [Extent1]
        WHERE  ([Extent1].[Discriminator] = N'ApplicationUser')
               AND ((((UPPER([Extent1].[UserName])) = (UPPER('rob' /* @p__linq__0 */)))
                     AND (NOT ((UPPER([Extent1].[UserName]) IS NULL)
                                OR (UPPER('rob' /* @p__linq__0 */) IS NULL))))
                     OR ((UPPER([Extent1].[UserName]) IS NULL)
                         AND (UPPER('rob' /* @p__linq__0 */) IS NULL)))) AS [Limit1]

Problem ist, das AspNetUsersTable hat keine Diskriminator-Spalte.

Könnte bitte jemand erklären, wo ich schief gegangen und wie ich es beheben soll?

InformationsquelleAutor Rob Bowman | 2014-10-17

Schreibe einen Kommentar