1

ich ein ASP.Net MVC-Projekt habe, dass meine db Entitäten und mein Kontext enthält verwendet IdentityDbContext applicationuserFehler bei der Referenzierung Einheiten von ASP.Net MVC-Projekt in Azure Funktion Projekt

public class MyprojectContext : IdentityDbContext<ApplicationUser> 

funktioniert alles einwandfrei verbinden und Abrufen von Datenbank Daten!

Ich habe auch ein azure-Funktionen-Projekt, um Arbeit zu leisten, und ich muss auf die db zugreifen (mit Entity Framework) und holen Sie verschiedene Entität Daten. Also habe ich die MVC-App in der Azure Function-App referenziert, damit ich alle Entitäten/Klassen haben kann.

Aber wenn ich versuche, Daten in eine der Entitäten 'YogaSpaceEvent' zu holen, erhalte ich den Fehler unten, wenn ich meine eigene Entität im Azure Funktionscode erstelle (siehe Code unten), funktioniert es gut und holt die Daten. Ich verwende DbContext nur

Ich vermute, es mit jedem Mitglied, etwas zu tun Daten in dem MVC-app Holen mit

IdentityDbContext<ApplicationUser> 

und in der Azure Funktion App haben könnte ????

System.Data.Entity.ModelConfiguration.ModelValidationException: ‚Ein oder mehr Überprüfungsfehler während der Modellerzeugung erfaßt wurden: PostEventEmail.IdentityUserLogin: EntityType 'IdentityUserLogin' hat keinen Schlüssel definiert. Definieren Sie den Schlüssel für diesen EntityType.

namespace PostEventEmail 
{ 
public static class PostEventEmail 
{ 
    [FunctionName("PostEventEmail")] 
    public static void Run([TimerTrigger("0 */1 * * * *")]TimerInfo myTimer, TraceWriter log) 
    { 
     log.Info($"C# Timer trigger function executed at: {DateTime.Now}"); 

     YogaSpaceEvent newEvent = new YogaSpaceEvent(); // references the Asp.Net MVC app entity 

     using (var dbContext = new YogabandyContext()) 
     { 
      var ybEvents = dbContext.YogaSpaceEvent.FirstOrDefault(); 
      log.Info("event id = " + ybEvents.YogaSpaceEventId); 
     }   
    } 

    // if I uncomment this and use it, it works fine and fetches data 
    //public class YogaSpaceEvent 
    //{ 
    // public int YogaSpaceEventId { get; set; } 
    //} 

    public partial class YogabandyContext : DbContext 
    { 
     public YogabandyContext() 
      : base("Server=tcp:yoga2017.database.windows.net,1433;Initial Catalog=Yoga2017;Persist Security Info=False;User ID=chuckd;Password=**********!;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;") 
     { 
     } 

     public DbSet<YogaSpaceEvent> YogaSpaceEvent { get; set; } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      //base.OnModelCreating(modelBuilder); 
     } 
    } 

} 

}

+0

Sie könnten Ihre Frage bearbeitet haben, anstatt sie erneut zu stellen, aber es ist mir egal, alles ist gut. –

Antwort

1

Nach Ihrer Beschreibung, habe ich meine Asp.Net MVC-Anwendung mit ASP.NET Identität dieses Problem zu überprüfen. Ich habe die YogaSpaceEvent in meinem MVC-Projekt und die DbContext wie folgt definiert:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public DbSet<YogaSpaceEvent> YogaSpaceEvent { get; set; } 

    public ApplicationDbContext() 
     : base("DefaultConnection", throwIfV1Schema: false) 
    { 
    } 

    public ApplicationDbContext(string connectionString) : base(connectionString, throwIfV1Schema: false) 
    { 
    } 

    public static ApplicationDbContext Create() 
    { 
     return new ApplicationDbContext(); 
    } 
} 

public class YogaSpaceEvent 
{ 
    public int YogaSpaceEventId { get; set; } 
    public string YogaSpaceEventName { get; set; } 
    public DateTime CreateTime { get; set; } 
} 

Für meine Azure-Funktion, ich habe gerade das MVC-Projekt verwiesen und verwenden Sie die ApplicationDbContext für Unternehmen aus meiner Datenbank zugreifen, wie folgt:

public static void Run([TimerTrigger("*/20 * * * * *")]TimerInfo myTimer, TraceWriter log) 
{ 
    log.Info($"C# Timer trigger function executed at: {DateTime.Now}"); 

    var connString=ConfigurationManager.AppSettings["sqldb-connectionstring"]; 

    using (var dbContext = new ApplicationDbContext(connString)) 
    { 
     var ybEvents = dbContext.YogaSpaceEvent.FirstOrDefault(); 
     log.Info("event id = " + ybEvents?.YogaSpaceEventId); 
    } 
} 

local.settings.json

{ 
    "IsEncrypted": false, 
    "Values": { 
    "AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=AccountName;AccountKey=AccountKey", 
    "AzureWebJobsDashboard": "DefaultEndpointsProtocol=https;AccountName=AccountName;AccountKey=AccountKey", 
    "sqldb-connectionstring": "Data Source=.\\sqlexpress;Initial Catalog=DefaultConnection;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" 
    } 
} 

Es könnte auf meiner Seite arbeiten. Hier ist mein Code sample, auf den Sie sich beziehen könnten. Darüber hinaus ist Ihr Fehler seltsam, Sie müssen Ihren Code überprüfen oder ein Beispielprojekt für uns bereitstellen, um dieses Problem zu reproduzieren.

+0

Hallo ya! Ich habe es herausgefunden. Ich musste einige Referenzen ändern und ein paar Nugets herunterladen, aber es funktioniert jetzt. Vielen Dank! – user1186050

Verwandte Themen