0
votes

Here is my problem.

I use a dynamic connection string for my Entity Framework context.

//In Web Config

add key="DataSource" value="WIN-QBRH0MJL8IT\ISS" />


//In my EntityFactory.cs
 public static DBEntities GetEntity()
        {
            var scsb = new SqlConnectionStringBuilder();

            scsb.DataSource = ConfigurationManager.AppSettings["DataSource"];

            scsb.InitialCatalog = "db1";
            scsb.MultipleActiveResultSets = true;
            scsb.IntegratedSecurity = true;
            if (HttpContext.Current.Session["DBName"] == null)
            {
                HttpContext.Current.Response.Redirect("/Account/Step1");
            }
            else
            {
                scsb.InitialCatalog = HttpContext.Current.Session["DBName"].ToString();
            }

            var builder = new EntityConnectionStringBuilder();
            builder.Metadata = "metadata=~/bin/Models/DBModel.csdl|~/bin/Models/DBModel.ssdl|~/bin/Models/DBModel.msl";
            builder.Provider = "System.Data.SqlClient";
            builder.ProviderConnectionString = scsb.ConnectionString;
            DBEntities db = new DBEntities(builder.ConnectionString);
            return db;
        }

I Know the problem is for this line :

builder.Metadata = "metadata=~/bin/Models/DBModel.csdl|~/bin/Models/DBModel.ssdl|~/bin/Models/DBModel.msl";

I check and the csdl, ssdl, msl are in /mvcinfosite/bin/Models/.csdl,.ssdl,.msl

The configuration for my edmx is:
Metadata Artifact Processing : Copy to Output Directory

Here is the full error

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 resources

Thanks

1

1 Answers

1
votes

Try to remove ~ character and use valid relative path to your app root. I think it is not able to work with this special character used on in ASP.NET application.