关于c#:Entity Framework:无法加载指定的元数据资源

Entity Framework: Unable to load the specified metadata resource

我决定把Entity Connection Stringapp.config移到code。但是,这样设置之后:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    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.

1
2
3
4
5
6
7
8
    /// <summary>
    /// Initialize a new EntityBazaCRM object.
    /// </summary>
    public EntityBazaCRM(string connectionString) : base(connectionString,"EntityBazaCRM")
    {
        this.ContextOptions.LazyLoadingEnabled = true;
        OnContextCreated();
    }

如果我在实体创建者内部定义.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"

我知道我遗漏了一些必须更改的内容,以便自生成的代码使用新的连接字符串,但是在哪里可以找到它呢?


在阅读了本文和博客之后,我改变了:

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

到:

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

它起作用了:-)


我升级到新的csproj格式(Visual Studio 2017,简单格式),然后开始出现此错误。csproj有一个特性,您不需要包含每个文件,而是默认情况下它包含文件夹下的所有相关文件,因此实体框架文件的处理方式相同,因此默认情况下这些文件不会嵌入到程序集中。

我需要手动将我的EDML文件的生成操作(如果是Microsoft Entity Framework,则为EDMX)更改为"devartentitydeploy"(我希望是针对Microsoft Entity Framework的EntityDeploy),并生成它,从而解决了我的问题。

enter image description here