SqlServerCe.3.5接続のエンティティフレームワークに問題があります。.SDFデータベースとエンティティ(モデル名はMain)を持つAssetsという小さなプロジェクトがあります。今、私がエンティティに接続しようとしているときに、何か奇妙なことが起こりました。初めてすべてが正常に動作しますが、今はこれを追加する必要がありました:
if (edmConnection.State != ConnectionState.Open)
{
edmConnection.Open();
}
エンティティへの接続が常に閉じられていたためです。この行を追加した後、データベースとエンティティにアクセスできますが、次のメッセージが表示されます。
指定された名前付き接続が構成に見つからないか、EntityClientプロバイダーでの使用を目的としていないか、無効です。
これはスタックトレースです:
System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString)at System.Data.EntityClient.EntityConnection..ctor(String connectionString)at System.Data.Objects.ObjectContext.CreateEntityConnection(String connectionString)atSystem.Data.Objects。 C:\ Users \ Orel \ Documents \ Visual Studio 2010 \ Projects \ Assets \ BL \ Model \ Main.Designer.csのBL.Model.DBEntities..ctor()にあるObjectContext..ctor(String connectionString、String defaultContainerName): C:\ Users \ Orel \ Documents \ Visual Studio 2010 \ Projects \ Assets \ BL \ Handlers \ mModelHandler.cs:lineのBL.Handlers.mModelHandler.GetOnlyInstance()のBL.Handlers.mModelHandler..ctor()の34行目30
これは私のコードとapp.configです:
private static mModelHandler _mInstance = null;
public static DBEntities m_context = null;
public static mModelHandler GetOnlyInstance()
{
if (_mInstance == null)
{
try
{
m_context = new DBEntities(GetConnectionString());
_mInstance = new mModelHandler();
}
catch (Exception)
{
throw;
}
}
return _mInstance;
}
public static EntityConnection GetConnectionString()
{
try
{
var filePath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
if (filePath == null) throw new ArgumentNullException("filePath");
if (filePath.EndsWith("\\Assets\\bin\\Debug"))
{
filePath = filePath.Replace("\\Assets\\bin\\Debug", "\\BL\\DB.sdf");
}
var sqlCeConnectionString = string.Format("Data Source={0}", filePath);
// Create an EDM connection
EntityConnectionStringBuilder entity = new EntityConnectionStringBuilder();
entity.Metadata = "res://*/Model.Main.csdl|res://*/Model.Main.ssdl|res://*/Model.Main.msl";
entity.Provider = "System.Data.SqlServerCe.3.5";
entity.ProviderConnectionString = sqlCeConnectionString;
var edmConnectionString = entity.ToString();
var edmConnection = new EntityConnection(edmConnectionString);
if (edmConnection.State != ConnectionState.Open)
{
edmConnection.Open();
}
return edmConnection;
}
catch (Exception e)
{
throw;
}
}
app.config:
<add name="DBEntities" connectionString="metadata=res://*/Model.Main.csdl|res://*/Model.Main.ssdl|res://*/Model.Main.msl;provider=System.Data.SqlServerCe.3.5;provider connection string='Data Source=|DataDirectory|\DB.sdf'" providerName="System.Data.EntityClient" />
app.configと接続文字列が一致しないことが問題である可能性があることを4mで読みました。これも試してみましたが、機能しません。
私はちょうどこれの画像を追加しました: リンク
ヘルプ!
オリョール