簡體   English   中英

MySQL和實體框架問題

[英]MySQL and Entity Framework issues

我正在嘗試使用EF6連接到MySql DB。 我看過許多示例,它們看起來都不同。 我看到了很多不同的方式,它們不像我所經歷的那樣連接到Oracle。

public string GetWebinarList()
{
    string str = "";
    string connectionString = "server=127.0.0.1;port=3306;UserId=user;database=db;password=pwd;CharSet=utf8;Persist Security Info=True;";

    using (MySqlConnection connection = new MySqlConnection(connectionString))
    {
        connection.Open();

        using (webinarListDbContext context = new webinarListDbContext())
        {
            var list = context.WebinarLists.ToString();
            str = list;
        }
        connection.Close();
    }
    return str;
}

上面的內容實際上看起來更像是通過ADO.DB而不是EF6連接。

上下文定義:

[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class webinarListDbContext : DbContext
{
    public webinarListDbContext() : this("MonkeyFist") { }
    public webinarListDbContext(string connStringName) : base(connStringName) { }
    static webinarListDbContext()
    {
        // static constructors are guaranteed to only fire once per application.
        // I do this here instead of App_Start so I can avoid including EF
        // in my MVC project (I use UnitOfWork/Repository pattern instead)
        DbConfiguration.SetConfiguration(new MySql.Data.Entity.MySqlEFConfiguration());
    }
    public DbSet<WebinarList> WebinarLists { get; set; }
}

Web.Config中:

<system.data>
    <DbProviderFactories>
        <remove invariant="MySql.Data.MySqlClient" />
        <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
    <connectionStrings>
        <add name="MonkeyFist" providerName="MySql.Data.MySqlClient" connectionString="server=127.0.0.1;port=3306;UserId=user;database=db;password=pwd;CharSet=utf8;Persist Security Info=True;"/>
    </connectionStrings>
</system.data>
<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
        <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
        <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </providers>
</entityFramework>

但這是檢查上下文對象時看到的:

在此處輸入圖片說明

使用SQLClient連接與MySQLClient相比到底有什么用? 為何將MonkeyFist設置為數據庫? 我如何將EF6連接到MySQL?

您看到此行為的原因是您實際上沒有將連接對象傳遞給上下文。 相反,您傳遞的是字符串“ MonkeyFist”,上下文假定該字符串是數據庫的名稱。 由於它無法在您的配置文件中找到該數據庫,因此它將創建一個具有相同名稱的本地數據庫。

參見此處: https : //msdn.microsoft.com/zh-cn/library/system.data.entity.dbcontext(v=vs.113).aspx

如果從派生上下文調用無參數DbContext構造函數,則派生上下文的名稱用於在app.config或web.config文件中查找連接字符串。 如果找不到連接字符串,則該名稱將傳遞到在Database類上注冊的DefaultConnectionFactory。 然后,連接工廠將上下文名稱用作默認連接字符串中的數據庫名稱。 (除非已注冊其他DefaultConnectionFactory,否則此默認連接字符串指向本地計算機上的。\\ SQLEXPRESS。)也可以通過將名稱傳遞給DbContext構造函數之一來顯式指定連接/數據庫名稱,而不使用派生的上下文名稱。需要一個字符串。

將連接對象傳遞給上下文。

暫無
暫無

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

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