实体框架:无法加载指定的元数据资源

时间:2012-01-23 12:35:06

标签: c# entity-framework

我决定将Entity Connection Stringapp.config移到代码中。但是在设置完成之后:

    public static string GetConnectionString() {
        string connection = "";

        SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder();
        sqlBuilder.DataSource = dbServer;
        sqlBuilder.InitialCatalog = dbInitialCatalog;

        sqlBuilder.IntegratedSecurity = false;
        sqlBuilder.UserID = dbUserName;
        sqlBuilder.Password = dbPasswWord;
        sqlBuilder.MultipleActiveResultSets = true;

        EntityConnectionStringBuilder entity = new EntityConnectionStringBuilder();
       // entity.Name = "EntityBazaCRM";
        entity.Metadata = @"res://*/Data.System.csdl|res://*/Data.System.ssdl|res://*/Data.System.msl";

        entity.Provider = "System.Data.SqlClient";
        entity.ProviderConnectionString = sqlBuilder.ToString();

        connection = entity.ToString();

        return connection;
    }

我在.Designer.cs中抛出Unable to load the specified metadata resource.异常。

    /// <summary>
    /// Initialize a new EntityBazaCRM object.
    /// </summary>
    public EntityBazaCRM(string connectionString) : base(connectionString, "EntityBazaCRM")
    {
        this.ContextOptions.LazyLoadingEnabled = true;
        OnContextCreated();
    }

如果我在我的Entity创建者中定义.Name,则会抛出另一个异常

"Other keywords are not allowed when the 'Name' keyword is specified." (System.ArgumentException) Exception Message = "Other keywords are not allowed when the 'Name' keyword is specified.", Exception Type = "System.ArgumentException"

我知道我错过了一些我必须改变的东西,以便自生成的代码使用新的连接字符串,但在哪里查找它?

2 个答案:

答案 0 :(得分:26)

阅读this answers文章和this blog后,我改变了:

  entity.Metadata = @"res://*/Data.System.csdl|res://*/Data.System.ssdl|res://*/Data.System.msl";

要:

  entity.Metadata = "res://*/";

它有效: - )

答案 1 :(得分:0)

在我开始收到此错误之后,我升级到了新的csproj格式(Visual Studio 2017,具有简单格式)。 csproj具有一项功能,您不需要包含每个文件,而是默认情况下包括该文件夹下的所有相关文件,因此对实体框架文件的处理方式相同,因此默认情况下不会将其嵌入到程序集中。

我需要手动将edml文件(如果是Microsoft实体框架,则为edmx)的构建动作更改为“ DevartEntityDeploy”(我希望是Microsoft Entity Framework的EntityDeploy)并进行构建,以解决我的问题

enter image description here