代码优先的MetaData

时间:2012-10-30 16:49:47

标签: c# entity-framework

当我使用代码优先方法时,我应该将什么用作MetaData 通过 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检查,例如 初始化者或??

3 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分: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;

答案 2 :(得分:-2)

答案就是这样: 而不是MetaData错过的是模型映射,它应该在这里完成:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
  // The Mapping
}