簡體   English   中英

為什么實體框架不能識別數據庫中的現有記錄?

[英]Why doesn't Entity Framework recognise an existing record in the database?

我為圖書館創建了一個數據庫系統,當用戶注冊時,程序會檢查他們是否已經有一個帳戶,但即使我可以在我的 DBMS 中看到記錄存在,這總是返回 false。

 public static bool UserExists(string email)
 {
            using (var context = new LibraryDbContext())
            {
                if (context.Users.Any(d => d.Email == email))
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
 }

另外,這是我的 Dbcontext class

public class LibraryDbContext : DbContext
{
    public LibraryDbContext()
        : base()
    {
    }

    public DbSet<Book> Books { get; set; }

    public DbSet<User> Users { get; set; }

    public DbSet<ReturnsLog> Returns { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseInMemoryDatabase("LibraryProjectDbo");
    }
}

首次連接到現有數據庫時,此類問題通常是由於 EF 指向您不期望的數據庫。 (即通過 Code First 創建一個,而不是連接到您現有的數據庫,或創建您不期望的表。)

當首先使用數據庫時,您應該始終禁用 Code First 初始化:

public LibraryDbContext()
{
    Database.SetInitializer<LibraryDbContext>(null);
}

如果 DbContext 嘗試創建一個有助於指導您進行更正的模式,這將生成一個異常。

默認情況下,EF 將在運行時位置的 web.confing/.exe.config 文件中查找名為“LibraryDbContext”的連接字符串。 使用連接字符串時,我通常喜歡明確地使用連接字符串名稱來反映數據庫而不是 DbContext。 通常我會利用多個上下文來拆分系統中所有指向同一個數據庫的行為。 因此,例如,我將主數據庫連接字符串稱為“AppConnection”,並將其傳遞給基本構造函數。

public LibraryDbContext()
    : base ("AppConnection")
{
    Database.SetInitializer<LibraryDbContext>(null);
}

或者,要測試您的連接,您可以將連接字符串本身傳遞給基本構造函數。

暫無
暫無

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

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