代码优先元数据

7

使用Code-First方式通过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。

  • 数据库已经存在。

  • 我应该使用其他什么东西来避免元数据检查,例如初始化程序或??

3个回答

4
对于CodeFirst,您只需使用“常规”的连接字符串 - 即不带元数据。 CodeFirst将在内部为您生成元数据工件,并将它们传递给ObjectContext实例,无需任何其他操作。 您不应使用EntityConnectionStringBuilder。
通常,您只需从DbContext派生上下文并创建一个无参数构造函数,该构造函数调用基础构造函数并传递配置文件中连接字符串的名称,例如:
public class MyContext : DbContext
{
    public MyContext() : base("Name=NorthwindConnectionString") {}
}

您可以将连接字符串传递给DbContext。如果您想使用连接字符串生成器,您应该使用SqlConnectionStringBuilder而不是EntityConnectionStringBuilder。

嗨,Pawel,我找到了答案并发布了。我要求CF中的MetaData替换,而不是ConnectionString ;),感谢您的参与。 - LastBye

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;

就像我之前所说的,这是在使用数据库优先时完成的。在代码优先中,我没有创建任何模型。如果我指定这些名称,由于不存在模型,我将会得到另一个错误! - LastBye

-2
答案很简单: 缺少的不是元数据,而是模型映射,应该在这里完成:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
  // The Mapping
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接