7

当我通过EntityConnectionStringBuilder使用代码优先方法时,我应该使用什么作为元数据

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."}
  • 我没有在这种方法上制作任何模型,因为我认为它不需要。

  • 我想要的只是以编程方式完成所有事情。

  • 在数据库优先方法中一切正常。

  • 在这里,我创建了连接字符串并将其传递给上下文。

  • EF 版本是 5.0。

  • 数据库已存在。

  • 我应该使用其他任何东西来避免MetaData检查,例如初始化程序或 ??

4

3 回答 3

4

对于 CodeFirst,您只使用“常规”连接字符串 - 即没有元数据。CodeFirst 将在幕后为您生成元数据工件,并将它们传递给 ObjectContext 实例,无需任何额外操作。您不应使用 EntityConnectionStringBuilder。

通常,您只需从 DbContext 派生上下文并创建一个无参数构造函数,该构造函数调用 base 并从配置中传递连接字符串的名称,例如:

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

您还可以将连接字符串传递给 DbContext。如果您想使用连接字符串构建器,您将为此使用 SqlConnectionStringBuilder 而不是 EntityConnectionStringBuilder。

于 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 回答