簡體   English   中英

在 Azure Function 項目中從 ASP.Net MVC 項目引用實體時出錯

[英]Error when referencing entities from ASP.Net MVC project in Azure Function project

我有一個包含我的 db 實體的 ASP.Net MVC 項目,我的上下文使用 IdentityDbContext applicationuser

public class MyprojectContext : IdentityDbContext<ApplicationUser>

一切正常連接和獲取數據庫數據!

我還有一個 azure 函數項目來執行工作,我需要訪問數據庫(使用實體框架)並獲取不同的實體數據。 所以我在 Azure Function 應用程序中引用了 MVC 應用程序,這樣我就可以擁有所有實體/類。

但是,當我嘗試將數據提取到實體“YogaSpaceEvent”之一時,我收到以下錯誤,如果我在 Azure 函數代碼(請參閱下面的代碼)中創建自己的實體,它可以正常工作並提取數據。

我猜這可能與每個成員使用 MVC 應用程序獲取數據有關

IdentityDbContext<ApplicationUser>

而在 Azure Function 應用中,我只使用了 DbContext???

System.Data.Entity.ModelConfiguration.ModelValidationException: '在模型生成過程中檢測到一個或多個驗證錯誤:PostEventEmail.IdentityUserLogin:: EntityType 'IdentityUserLogin' 沒有定義鍵。 定義此 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);
        }
    }

}

}

根據您的描述,我使用 ASP.NET Identity 創建了我的 Asp.Net MVC 應用程序來檢查此問題。 我在我的 MVC 項目中創建了YogaSpaceEvent並定義了 DBContext 如下:

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; }
}

對於我的 Azure 函數,我只是引用了 MVC 項目並使用ApplicationDbContext來訪問我的數據庫中的實體,如下所示:

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);
    }
}

本地設置.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"
  }
} 

它可以在我身邊工作。 這是我的代碼示例,您可以參考它。 而且,您的錯誤很奇怪,您需要檢查您的代碼或提供示例項目供我們重現此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM