7

EntityConnectionStringBuilderを介してCode-First Approach を使用しているときに、MetaData として何を使用する必要がありますか?

EntityConnectionStringBuilder entityBuilder;
entityBuilder.MetaData = ??  // Metadata = @"res://*/;";

このエラーが発生しました:

{"The specified metadata path is not valid. A valid path must be either an existing directory, an existing file with extension '.csdl', '.ssdl', or '.msl', or a URI that identifies an embedded resource."}
  • このアプローチについてはモデルを作成しませんでした。必要ないと思ったからです。

  • 私が望むのは、すべてをプログラムで行うことだけです。

  • Database-First Approach では、すべてが正常に機能していました。

  • ここでは、接続文字列を作成して Context に渡しました。

  • EF バージョンは 5.0 です。

  • データベースが存在します。

  • MetaDataイニシャライザや ?? など、チェックを回避するために他のものを使用する必要があります。

4

3 に答える 3

4

CodeFirst では、「通常の」接続文字列のみを使用します。つまり、メタデータは使用しません。CodeFirst は内部でメタデータ アーティファクトを生成し、追加のアクションを必要とせずに ObjectContext インスタンスに渡します。EntityConnectionStringBuilder は使用しないでください。

通常、DbContext からコンテキストを派生させ、base を呼び出して構成から接続文字列の名前を渡すパラメーターなしのコンストラクターを作成するだけです。

public class MyContext : DbContext
{
    public MyContext() : base("Name=NorthwindConnectionString") {}
}

接続文字列を DbContext に渡すこともできます。接続文字列ビルダーを使用する場合は、EntityConnectionStringBuilder ではなく、SqlConnectionStringBuilder を使用します。

于 2012-10-30T18:19:07.980 に答える
0

生成されたモデルを含むファイルへのパスだけでなく、接続文字列の詳細も追加する必要があります。以下は、それに入れる必要があるものの例です。

string efConnectionString= @"metadata=res://*/Blogging.csdl|res://*/Blogging.ssdl|res://*/Blogging.msl;provider=System.Data.SqlClient;provider connection string=""Data Source=.\SQLEXPRESS;Initial Catalog=Blogging;Integrated Security=True;MultipleActiveResultSets=True""";

EntityConnectionStringBuilder builder = new EntityConnectionStringBuilder(connectionString);

SqlConnectionStringBuilder sbuilder = new SqlConnectionStringBuilder(builder.ProviderConnectionString);

sbuilder.DataSource = "New Datasource";

builder.ProviderConnectionString = sbuilder.ConnectionString;
efConnectionString = builder.ConnectionString;
于 2012-10-30T18:06:04.357 に答える
-2

答えは単純にこれです:MetaDataの代わりに見逃されているのはモデルマッピングであり、ここで行う必要があります:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
  // The Mapping
}
于 2012-10-30T18:29:27.660 に答える