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

6

我决定将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文件中。

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

如果我在实体创建器中定义名称(.Name),它会抛出另一个异常:“当指定“Name”关键字时,不允许使用其他关键字。”(System.ArgumentException) 异常消息 = "Other keywords are not allowed when the 'Name' keyword is specified.", 异常类型 = "System.ArgumentException"。我知道我缺少某些东西,必须更改自动生成的代码以使用新的连接字符串,但要在哪里寻找呢?

请看这里。这是一个非常好的答案 :) https://dev59.com/7nRB5IYBdhLWcg3wNk53 - Phil
2个回答

28

阅读这篇答案这篇博客后,我进行了更改:

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

收件人:

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

它可以正常工作 :-)


1
看起来是个不错的解决方案,但这样做会有什么危害吗? - Akash Kava
不是我知道的。我从那时候开始一直在使用它,直到今天 ;) - MadBoy
只要您只有一个模型,这不应该是个问题。这对我解决了问题!+1 - bytecode77
2
抛出 ArgumentException 异常:参数 'xmlReader' 无效。必须提供至少一个 .ssdl 构件。 - Dmitriy

0

我升级到了新的csproj格式(使用简单格式的Visual Studio 2017),之后我开始遇到这个错误。csproj有一个功能,你不需要包含每个文件,而是默认情况下将所有相关文件都包含在文件夹下,因此实体框架文件也被视为同样的方式处理,所以这些文件默认情况下不会嵌入到程序集中。

我需要手动更改我的edml文件(Microsoft实体框架的edmx)的构建操作为“DevartEntityDeploy”(我希望对于Microsoft实体框架来说是EntityDeploy),然后进行构建,这解决了我的问题。

enter image description here


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