How to configure ProviderManifestToken for EF Code First

后端 未结 10 1096
-上瘾入骨i
-上瘾入骨i 2020-11-27 05:49

I have a asp.net MVC3 project using EF code-first. For my unit testing I have been using SQL Server CE 4.0 and SQL Server 2008 Express. Both have worked perfectly with EF ge

相关标签:
10条回答
  • 2020-11-27 06:29

    In my case, my connection string name must match the context class name.

    Connection String:

    <connectionStrings>
      <add name="NunuContext" connectionString="Data Source=|DataDirectory|Nunu.sdf" providerName="System.Data.SqlServerCe.4.0" />
    </connectionStrings>
    

    Context Class:

    using System.Data.Entity;
    namespace Nunu.Models
    {
        public class NunuContext : DbContext
        {
            System.Data.Entity.DropCreateDatabaseIfModelChanges<Nunu.Models.NunuContext>());
    
            public DbSet<Nunu.Models.NunuFirst> NunuFirsts { get; set; }
    
            public DbSet<Nunu.Models.NunuLast> NunuLasts { get; set; }
        }
    }
    
    0 讨论(0)
  • 2020-11-27 06:35

    I found, when i provided explicit "User Id=abcUser; Password=somePwd;" in my connection string i am able to resolve the same error. Earlier i was using the "Trusted_Connection=true;", which allowed me to debug my web project, but started giving me error - {"The provider did not return a ProviderManifestToken string."} as soon as i added the Windows azure project and tried debugging the Azure project after adding my web project as a web role under it.

    Hope it helps some one experiencing a similar situation.

    Thanks, Vivek Bahl

    0 讨论(0)
  • 2020-11-27 06:36

    After hours of searching & fiddling, I found a way to do it. Turns out the DbModelBuilder class takes a DbProviderInfo in its Build method, so I use that instead of relying on EF to call OnModelCreated:

    // 'Entities' is my DbContext subclass, the "container" in EF terms.
    public static Entities GetNewContext()
    {
        // Get a connection, for example:
        var connection = new SqlConnection(GetConnectionString());
    
        // Create a DbModelBuilder
        var modelBuilder = new DbModelBuilder();
        // Configure the model builder.
        // I changed my DbContext subclass - added a public version of OnModelCreated and called it ConfigureModelBuilder
        Entities.ConfigureModelBuilder(modelBuilder);
    
        // Here's where the magic happens.
        // Build the model and pass the ProviderManifestToken (I use 2005 to avoid a bug in precision of sql datetime columns when using concurrency control)
        var model = modelBuilder.Build(new System.Data.Entity.Infrastructure.DbProviderInfo("System.Data.SqlClient", "2005"));
        // Compile the model
        var compiledModel = model.Compile();
    
        // Create the container (DbContext subclass). Ideally all the previous stuff should be cached.
        return new Entities(connection, compiledModel, true);
    }
    

    Obviously this needs some reorganization (e.g. cache the compiled model so you don't need to re-build it every time a context is created).

    For me this completely solved the problem. Enjoy!

    0 讨论(0)
  • 2020-11-27 06:39

    I just had this exact problem but I traced it down to my SQL Server service wasn't running. I had just restarted my computer and usually it starts on it's own but didn't for some reason.

    0 讨论(0)
  • 2020-11-27 06:40

    I had this problem when working through the MVC3 tutorial on ASP.NET.

    My solution ended up being to use (localhost) instead of a named Data Source. This works fine on my box, for local dev work, but wouldn't help if the database were on a separate server.

    0 讨论(0)
  • 2020-11-27 06:41

    Changing to Data Source=localhost worked for me also using MS SQL 2008 R2 Express

    0 讨论(0)
提交回复
热议问题