C# EF 4.1首先使用代码不要创建新数据库

C# EF 4.1首先使用代码不要创建新数据库,c#,.net,asp.net-mvc-3,entity-framework,ef-code-first,C#,.net,Asp.net Mvc 3,Entity Framework,Ef Code First,我使用Entity framework 4.1代码优先方法创建了一个新的web,该方法具有不同的层: 在模型层,我定义了类模型 在数据层中,我定义了存储库类 在数据库层,我实现了repository类。创建上下文时,我实现了DbContext来定制自己的表 最后,我将这些层的引用添加到网站(表示层)。运行网站后,EF 4.1不会在App_数据文件夹中创建数据库。我想知道哪些步骤我做错了。请查看我的代码并给我一些建议。提前谢谢 我只是添加了我认为其中包含错误的类代码。模型层中的其他类模型和数据层中

我使用Entity framework 4.1代码优先方法创建了一个新的web,该方法具有不同的层:

在模型层,我定义了类模型

在数据层中,我定义了存储库类

在数据库层,我实现了repository类。创建上下文时,我实现了DbContext来定制自己的表

最后,我将这些层的引用添加到网站(表示层)。运行网站后,EF 4.1不会在App_数据文件夹中创建数据库。我想知道哪些步骤我做错了。请查看我的代码并给我一些建议。提前谢谢

<>我只是添加了我认为其中包含错误的类代码。模型层中的其他类模型和数据层中的类存储库与错误无关。所以我不把它们写在这里

web.config:

<add name="ApplicationServices" connectionString="Data Source=DESKTOP\Neven;Initial Catalog=aspnetdb;Integrated Security=True" providerName="System.Data.SqlClient" />
      <add name="FashionShopData" connectionString="Data Source=|DataDirectory|FashionShopData.mdf;Initial Catalog=FashionShopData;Integrated Security=True" providerName="System.Data.SqlClient" />
在数据库SQL层中:

上下文

    using System.ComponentModel.DataAnnotations;
using System.Data.Entity;
using FashionShop.Data.Repositories;
using FashionShop.Models;

namespace FashipShop.Data.Sql
{

    public partial class FashionShopContext : DbContext, IUnitOfWork
    {
        /// <summary>
        /// This method sets up the database appropriately for the available model objects.
        /// This method only sets up the data tier.  
        /// Any shared or model level requirements (data validations, etc) are on the model objects themselves.
        /// </summary>
        /// <param name="modelBuilder">The model builder object for creating the data model.</param>
        public FashionShopContext()
        : base("name=FashionShopData")
    {

    }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {

            SetupUserEntity(modelBuilder);

            SetupCategoryEntity(modelBuilder);

            SetupProductEntity(modelBuilder);

            SetupOrderEntity(modelBuilder);

        }

        private static void SetupUserEntity(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<User>().HasKey(r => r.UserId);
            modelBuilder.Entity<User>().Property(r => r.UserId).HasDatabaseGeneratedOption(
                DatabaseGeneratedOption.Identity);

            modelBuilder.Entity<User>().HasMany(o => o.Orders);

            modelBuilder.Entity<User>().Property(r => r.Email).IsRequired();
        }

        private static void SetupCategoryEntity(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Category>().HasKey(c => c.CateId);
            modelBuilder.Entity<Category>().Property(c => c.CateId).HasDatabaseGeneratedOption(
                DatabaseGeneratedOption.Identity);
            modelBuilder.Entity<Category>().Property(c => c.ParentId).IsOptional();
            modelBuilder.Entity<Category>().HasMany(p => p.Products);
        }

        private static void SetupProductEntity(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Product>().HasKey(p => p.ProductId);
            modelBuilder.Entity<Product>().Property(p => p.ProductId).HasDatabaseGeneratedOption(
                DatabaseGeneratedOption.Identity);

            modelBuilder.Entity<Product>().HasRequired(c => c.Category).WithRequiredPrincipal().WillCascadeOnDelete(true);
        }

        private static void SetupOrderEntity(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Order>().HasKey(o => o.OrderId);
            modelBuilder.Entity<Order>().Property(o => o.OrderId).HasDatabaseGeneratedOption(
                DatabaseGeneratedOption.Identity);
            modelBuilder.Entity<Order>().HasMany(p => p.Products).WithMany(o => o.Orders).Map(op =>
                                                                                                  {
                                                                                                      op.ToTable(
                                                                                                          "ProductOrder");
                                                                                                      op.MapLeftKey(
                                                                                                          "OrderId");
                                                                                                      op.MapRightKey(
                                                                                                          "ProductId");
                                                                                                  });
        }

        public DbSet<User> Users { get; set; }

        public DbSet<Category> Categories { get; set; }

        public DbSet<Product> Products { get; set; }

        public DbSet<Order> ShoppingCarts { get; set; }

        void IUnitOfWork.SaveChanges()
        {
            base.SaveChanges();
        }
    }
}
进入应用程序_Start()。但在我更改代码后,出现了另一个错误:

"A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server"
以下是我使用的连接字符串:

<add name="FashionShopData" connectionString="Data Source=|DataDirectory|FashionShopData.mdf;Initial Catalog=FashionShopData;Integrated Security=True" providerName="System.Data.SqlClient" />

是我的连接字符串错了吗?如何更正它?

试试

<add name="ContextName" connectionString="Data Source=ServerName;Initial Catalog=DBCataloName;Integrated Security=True;MultipleActiveResultSets=True;App=EntityFramework"
   providerName="System.Data.SqlClient" />

试试看


您的问题是启动在DbContext派生类上设置的连接字符串

它应该像下面这样

public partial class FashionShopContext : DbContext, IUnitOfWork
{

   public static string ConnectionString { get; set; }

   public FashionShopContext() : base(ConnectionString ?? "FashionShopData")
    {

    }
}
Global.asax

protected void Application_Start()
{
FashionShopContext.ConnectionString = ConfigurationManager.ConnectionStrings["FashionShopData"].ConnectionString;
}

我希望这将对您有所帮助。

您的问题是启动连接字符串,您在DbContext派生类上设置了该字符串

它应该像下面这样

public partial class FashionShopContext : DbContext, IUnitOfWork
{

   public static string ConnectionString { get; set; }

   public FashionShopContext() : base(ConnectionString ?? "FashionShopData")
    {

    }
}
Global.asax

protected void Application_Start()
{
FashionShopContext.ConnectionString = ConfigurationManager.ConnectionStrings["FashionShopData"].ConnectionString;
}

我希望这将对您有所帮助。

您打算将FashionShop和FashipShop作为名称空间的开始吗?我错了,我将更改代码并重试。但我认为这不是一个问题。因为我使用“添加引用”将所有层添加到我的网站(表示层)中,所以您是否打算将FashionShop和FashipShop作为名称空间的开始?我的错误,我将更改代码并重试。但我认为这不是一个问题。因为我使用“添加引用”将所有层添加到我的网站(表示层)
public partial class FashionShopContext : DbContext, IUnitOfWork
{

   public static string ConnectionString { get; set; }

   public FashionShopContext() : base(ConnectionString ?? "FashionShopData")
    {

    }
}
protected void Application_Start()
{
FashionShopContext.ConnectionString = ConfigurationManager.ConnectionStrings["FashionShopData"].ConnectionString;
}