13

Sql Server2008R2のローカルインスタンスでCodeFirstを使用しようとしています。ユーザー「dev」を作成しました。ログインして、SqlManagmentStudioを使用してデータベースを作成できます。問題は、EntityFrameworkでDbContextを使用してデータベースを作成しようとすると、エラーメッセージが表示され続けることです。エラーメッセージは次のとおりです。

「SQLServerへの接続の確立中にネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないか、アクセスできませんでした。インスタンス名が正しいこと、およびSQLServerがリモート接続を許可するように構成されていることを確認してください。SQLネットワークインターフェイス、エラー:26-指定されたサーバー/インスタンスの検索中にエラーが発生しました "

SQL Serverを確認したところ、リモート接続が許可されているというエラーメッセージが表示されます。

次のコードでシステムを抽象化しましたが、同じエラーが発生します。

namespace CodeFirstConsole
{
    public class Program
    {
        static void Main(string[] args)
        {
            var db = new MyContext();
            try { Console.WriteLine(db.Parents.Count()); }
            catch (Exception) { throw; }
            Console.Read();
        }
    }

    internal class MyContext : DbContext
    {
        public DbSet<ParentObject> Parents { get; set; }
        public DbSet<ChildObject> Children { get; set; }

        public MyContext()
        {
            this.Database.Connection.ConnectionString =
                "Data Source=.;Database=ConsoleTest;Initial Catalog=ConsoleTest;User ID=dev;Password=dev;";
        }
    }

    internal class ParentObject
    {
        public int Id { get; set; }
        public string PropertyOne { get; set; }
    }

    internal class ChildObject
    {
        public int Id { get; set; }
        public bool PropertyOne { get; set; }
        public string PropertyTwo { get; set; }

        public virtual ParentObject Parent { get; set; }
    }

    internal class MyInitializer : DropCreateDatabaseAlways<MyContext>
    {

        protected override void Seed(MyContext context)
        {
            context.Parents.Add(new ParentObject() { PropertyOne = "hi" });
            base.Seed(context);
        }
    }
}
4

6 に答える 6

25

私は約1日私を狂わせたのと同じエラーがありました。私の状況は、既存のスタートアッププロジェクトで大規模なソリューションがあり、永続化プロジェクトにEFを追加していたことでした。

したがって、最初のステップはEF依存関係を追加することでした。これにより、永続プロジェクトに正しいEFコンテンツを含むapp.configが作成されました。次に、Enable-Migrationsに移動し、この投稿で同じエラーが発生しました。この時点では、EF app.config設定をスタートアッププロジェクトのapp.configにコピーすることは考えていませんでした。最終的にアプリを実行する前に、EFapp.config設定を試してみる必要があると思ったからです。

ソリューションのスタートアッププロジェクトを永続性プロジェクトに変更して、EFに正しいapp.configを見つけてもらうと、問題は解決しました。または、EntityFramwework関連のセクションをスタートアッププロジェクトのapp.configにコピーすることもできます。

于 2012-11-20T03:28:25.540 に答える
1

ローカルで同じエラーメッセージが表示されましたが、昨日は正常に機能しました。ソリューション内の間違ったプロジェクトがスタートアッププロジェクトとして設定されていることが判明しました。

したがって、パッケージマネージャーコンソールのupdate-databaseコマンドの後にもこのメッセージが表示される場合は、正しいスタートアッププロジェクトが設定されているかどうかを確認してください。

たとえば、Webプロジェクトであり、ヘルパープロジェクトの1つではありません。Visual Studioには、他のプロジェクトをスタートアップとして設定する習慣があるようです...

于 2016-05-13T10:05:35.140 に答える
0

ここを見てみると、多くの原因が説明されています。コメントでサーバー名を明示的に指定し、データソースにドットがあるだけなので、コードはSQLサーバーと同じマシンでも実行されることを示したためです。で実行されているc#コードプログラムと同じマシンであることを示します。

http://blogs.msdn.com/b/sql_protocols/archive/2007/05/13/sql-network-interfaces-error-26-error-locating-server-instance-specificed.aspx

于 2012-06-18T22:02:20.547 に答える
0

スタートアッププロジェクトにもEntityFramework依存関係を追加する必要がありました。

Install-Package EntityFramework

またconnectionStrings、メインプロジェクトにApp.config/Web.configを定義する必要がありました。

<connectionStrings>
    <add name="Database" providerName="System.Data.SqlClient" connectionString="foo.bar" />
</connectionStrings>
于 2016-01-13T13:58:12.027 に答える
0

これが私にとっての解決策でした 従来のSqlClientはサーバーインスタンスを見つけることができますが、EFは見つけることができません

要するに:

Database.SetInitializer<MyContext>(
new MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration>(
    useSuppliedContext: true));

ここでの主要な部分はuseSuppliedContextです:true

于 2016-02-05T14:59:23.167 に答える
0

私も同じ問題を抱えていて、一日中過ごしました。ついに@Christianの答えを見つけました、そして今私ははるかに良い方法を見つけました!

スタートアップConnectionStringプロジェクトに入れます。したがって、エンティティを変更するたびに切り替える必要はありません。

于 2018-01-22T09:02:38.227 に答える