2016-04-05 17 views
1

と無効なオブジェクトが、これは私が私のプロジェクトにデータベースを追加する方法である:Entity Frameworkの - だけで簡単な概要のためのカスタム接続文字列

  • 私は、ADO.NET Data Modelのエンティティを追加することにより、データソースを追加し、データベースからEF Designerを選択してください。

  • このようにすると、私のweb.configに接続文字列が生成されています。 統合セキュリティがtrueに設定されている(重要な場合)。

  • 接続したら、右クリックして 'からモデルを更新しました。

複数の環境があるため、私はパラメータ化されたコンストラクタを使用してカスタムコンテキストを構築しました。コードは(凝縮し、検閲)などになります。

public partial class DataEntities : DbContext 
    { 
     public DataEntities(string connectionString) 
      : base(connectionString) 
     { 
     } 
    } 

それぞれの環境に関連する異なるローカルSQLアカウントがあります。正しい環境で正しいアカウントに関連付けられた接続文字列を生成するように要求します。

<connectionStrings> 
    <add name="DataEntities" connectionString="metadata=res://*/Models.XXModel.XXModel.csdl|res://*/Models.XXModel.XXModel.ssdl|res://*/Models.XXModel.XXModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MYSQLSERVER;initial catalog=Data;integrated security=True;MultipleActiveResultSets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
    <secureConnectionStringsSection passwordPolicy="AllowLocalPasswordsForConnectionStrings"> 
    <secureConnectionStrings> 
     <add name="DataEntities-Local" providerName="System.Data.SqlClient" connectionString="data source=MYSQLSERVER;user id=ACCNT; password=PASSWORD;" /> 
    </secureConnectionStrings> 
    </secureConnectionStringsSection> 

私はDataEntityオブジェクトをインスタンス化しています、私は私のカスタム接続文字列を取得するために書かれているヘルパー関数を呼び出しています:ので、私のウェブ設定を行うと、このようになります。私は、次のコードを介して、そうやっている:私は私の接続文字列ヘルパーが正しく、私は私のweb.configファイルを持っているカスタム接続文字列を引っ張るないことを確認することができます

private DataEntities adDB = new DataEntities(XXX.Helpers.EFDBHelper.getDataConnectionString()); 

。しかし、私は実際に私は次のようなエラーが残っていたデータベースに電話をかけてみたら:私は私のparametizedコンストラクタは正しい接続文字列と呼ばれていることを知っている

Invalid object name 'dbo.mycolumn'.

。また、私はPowerShellでそれをテストしている、私の接続文字列が有効である知っている:

$conn = New-Object System.Data.SqlClient.SqlConnection 
$conn.ConnectionString = "data source=MYSQLSERVER;user id=ACCNT;password=PASSWORD" 
$conn.Open() 
$conn.Close() 

私はそれは同様にデータベース自体の問題ではないことを確信しています。私は私のエンティティの初期化からパラメータを削除する瞬間:

private DataEntities adDB = new DataEntities();

私は、データベースからデータを取得することができています。私はそれが自動生成された接続文字列を使用すると仮定しています。一度それが私の地元の環境を過ぎると、私は統合されたセキュリティを使用することができないので、動作しません。

私は申し訳ありませんが、私はここの技術を初めて熟知しています。私はそれがちょうど私が行方不明の小さな何かであることを確信しています。

答えて

0

私の接続文字列ではカタログを指定しませんでした。

私は技術に慣れているので、私が継承していた既存のコードの一部を単純に複製しようとしました。レプリケートしようとした接続文字列にはカタログも表示されませんでした。

しかし...私が新しいデータソースと話すために使用しているアカウントは、データベースのすべてのレベルにアクセスできるため、カタログが必要でした。古い継承データベースには、SQLアカウントにアクセスできるカタログが1つしかありませんでした。

あなたは生きていて、学びます!

関連する問題