Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 实体框架无法连接和创建数据库_Sql Server_Entity Framework_Asp.net Web Api - Fatal编程技术网

Sql server 实体框架无法连接和创建数据库

Sql server 实体框架无法连接和创建数据库,sql-server,entity-framework,asp.net-web-api,Sql Server,Entity Framework,Asp.net Web Api,我对EF并不熟悉,只是在下面举了一本WebAPI书的例子 这是我得到的错误: 这是我的DbContext类: namespace SportsStore.Models { public class ProductDbContext: DbContext { public ProductDbContext() : base("SportsStoreDb") { Database.SetInitiali

我对
EF
并不熟悉,只是在下面举了一本
WebAPI
书的例子

这是我得到的错误:

这是我的
DbContext
类:

namespace SportsStore.Models
{
    public class ProductDbContext: DbContext
    {
        public ProductDbContext()
            : base("SportsStoreDb")
        {
            Database.SetInitializer<ProductDbContext>(new ProductDbInitializer());
        }

        public DbSet<Product> Products { get; set; }
        public DbSet<Order> Orders { get; set; }
        public DbSet<OrderLine> OrderLines { get; set; }
    }
}
namespace sportstore.Models
{
公共类ProductDbContext:DbContext
{
publicProductDBContext()
:base(“SportsStoreDb”)
{
SetInitializer(new ProductDbInitializer());
}
公共数据库集产品{get;set;}
公共数据库集命令{get;set;}
公共DbSet命令行{get;set;}
}
}
还有这样一个初始化器类:

using System.Collections.Generic;
using System.Data.Entity;

namespace SportsStore.Models
{
    public class ProductDbInitializer : DropCreateDatabaseAlways<ProductDbContext>
    {
        protected override void Seed(ProductDbContext context)
        {
            new List<Product> {
                new Product() { Name = "Kayak", Description = "A boat for one person",
                    Category = "Watersports", Price = 275m },
                new Product() { Name = "Lifejacket",
                    Description = "Protective and fashionable",
                    Category = "Watersports", Price = 48.95m },
                new Product() { Name = "Soccer Ball",
                    Description = "FIFA-approved size and weight",
                    Category = "Soccer", Price = 19.50m },
                new Product() {
                    Name = "Corner Flags",
                    Description = "Give your playing field a professional touch",
                    Category = "Soccer", Price = 34.95m },
                new Product() { Name = "Stadium",
                    Description = "Flat-packed 35,000-seat stadium",
                    Category = "Soccer", Price = 79500m },
                new Product() { Name = "Thinking Cap",
                    Description = "Improve your brain efficiency by 75%",
                    Category = "Chess", Price = 16m },
                new Product() { Name = "Unsteady Chair",
                    Description = "Secretly give your opponent a disadvantage",
                    Category = "Chess", Price = 29.95m },
                new Product() { Name = "Human Chess Board",
                    Description = "A fun game for the family",
                    Category = "Chess", Price = 75m },
                new Product() { Name = "Bling-Bling King",
                    Description = "Gold-plated, diamond-studded King",
                    Category = "Chess", Price = 1200m },
            }.ForEach(product => context.Products.Add(product));

            context.SaveChanges();

            new List<Order> {
                new Order() { Customer = "Alice Smith", TotalCost = 68.45m,
                    Lines = new List<OrderLine> {
                        new OrderLine() { ProductId = 2, Count = 2},
                        new OrderLine() { ProductId = 3, Count = 1},
                    }},
                new Order() { Customer = "Peter Jones", TotalCost = 79791m,
                    Lines = new List<OrderLine> {
                        new OrderLine() { ProductId = 5, Count = 1},
                        new OrderLine() { ProductId = 6, Count = 3},
                        new OrderLine() { ProductId = 1, Count = 3},
                   }}
            }.ForEach(order => context.Orders.Add(order));

            context.SaveChanges();
        }
    }
}
使用System.Collections.Generic;
使用System.Data.Entity;
名称空间sportstore.Models
{
公共类ProductDbInitializer:DropCreateDatabaseAlways
{
受保护的覆盖无效种子(ProductDbContext上下文)
{
新名单{
新产品(){Name=“Kayak”,Description=“单人船”,
Category=“Watersport”,价格=275m},
新产品(){Name=“救生衣”,
Description=“防护时尚”,
Category=“Watersport”,价格=4895万美元,
新产品(){Name=“足球”,
Description=“国际足联批准的尺寸和重量”,
类别=“足球”,价格=19.50m},
新产品(){
Name=“角旗”,
Description=“给你的运动场一个专业的触感”,
Category=“Soccer”,价格=3495万英镑,
新产品(){Name=“Stadium”,
Description=“可容纳35000个座位的扁平式体育场”,
Category=“Soccer”,价格=795亿美元},
新产品(){Name=“Thinking Cap”,
Description=“将您的大脑效率提高75%”,
Category=“Chess”,价格=16m},
新产品(),
Description=“暗中给对手一个劣势”,
Category=“Chess”,价格=2995万美元,
新产品(){Name=“人类棋盘”,
Description=“一款有趣的家庭游戏”,
Category=“Chess”,价格=75m},
新产品(){Name=“Bling Bling King”,
Description=“镀金,镶嵌钻石的国王”,
Category=“Chess”,价格=1200m},
}.ForEach(product=>context.Products.Add(product));
SaveChanges();
新名单{
新订单(){Customer=“Alice Smith”,总成本=6845万,
行=新列表{
新医嘱行(){ProductId=2,Count=2},
新医嘱行(){ProductId=3,Count=1},
}},
新订单(){Customer=“Peter Jones”,总成本=79791m,
行=新列表{
新医嘱行(){ProductId=5,Count=1},
新医嘱行(){ProductId=6,Count=3},
新医嘱行(){ProductId=1,Count=3},
}}
}.ForEach(order=>context.Orders.Add(order));
SaveChanges();
}
}
}
我还可以登录到我的SQL Server引擎的localhost db


那么我应该看什么来解决这个问题呢?

好的,我终于自己解决了。是的,没有连接字符串。很高兴我没有去那个兔子洞,人们把它贴成了重复答案

问题出在Web.Config下面的版本是13,我把它改成了11,现在它可以工作了

<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="v11.0" />
  </parameters>
</defaultConnectionFactory>


屏幕截图的可能副本更好!千言万语的图画!代码也附在后面。。。你还需要什么?那不是复制品。那一个正在使用连接字符串。我的方法是EF代码优先,我的方法中甚至没有连接字符串。这本书从字面上解释说,在代码优先的方法中,你不需要连接字符串。一旦它成为基类,它将为我们创建模式和数据库。如果你不知道答案,那没关系。继续,让其他人给出他们的想法。在我看来,这就像是在尝试在SQL Express中创建db,这种情况可能发生在所列出的场景中。我发现更好的方法是控制并使用一个到已知数据库的显式连接字符串,而不是依赖一个不断变化的约定。我也看到了这种行为,连接字符串也解决了这个问题,并为您提供了更多的控制。一年后,当有人过来更改代码(或升级到ef core)时,它将成为wtf?