一个code first 入门的代码哦。根据园子里的代码敲的,我代码运行成功了。但在数据库没有生成数据库。
园子里这样说:
当没有显示设置数据连接的时候,默认的数据库是:.\SQLEXPRESS。如果本地没有SQLEXPRESS,EF会尝试LocalDb ((localdb)\v11.0) .\SQLEXPRESS
这句话的意思是本地没有 .\SQLEXPRESS就会尝试LocalDb ((localdb)\v11.0) .\SQLEXPRESS是吗,但我本地是没有.\SQLEXPRESS这个呢。我链接数据库的服务器名称就是一个点 . 那上面那句话EF就会这样找吗?((localdb)\v11.0) .\SQLEXPRESS
那不是还在找这个吗?.\SQLEXPRESS 我没有。那不还是找不到。会的帮我解决下。谢谢了。
补充一下:我是vs2012开发工具,如果我导入EF4.0就会报错:提供程序未返回 ProviderManifestToken 字符串。但我通过NuGet安装的,这个安装的是EF5
这样就不报错。执行成功。数据库没生成数据库。会的也帮我解答下。谢谢。我是刚学者弄EF。
Model类
/// <summary> /// Model /// </summary> public class Destination { public int DestinationId { get; set; } public string Name { get; set; } public string Country { get; set; } public string Description { get; set; } public byte[] Photo { get; set; } public List<Lodging> Lodgings { get; set; } } public class Lodging { public int LodgingId { get; set; } public string Name { get; set; } public string Owner { get; set; } public bool IsResort { get; set; } public Destination Destination { get; set; } }
Context
/// <summary> /// Context /// </summary> public class BreakAwayContext : DbContext { public DbSet<Destination> Destinations { get; set; } public DbSet<Lodging> Lodgings { get; set; } }
Main
static void Main(string[] args) { var destination = new Destination { Country = "Indonesia", Description = "EcoTourism at its best in exquisite Bali", Name = "Bali" }; using (var context = new BreakAwayContext()) { context.Destinations.Add(destination); context.SaveChanges(); } Console.WriteLine("OK"); Console.ReadKey(); }
你可以这么认为,当你计算机中有本地数据库比如你安装了sql2008那它就会自动认为这个是你的数据库,没有话连接sql exress,再没有连接localdb,localdb是属于sql2012的一个比sql express更轻量级的数据库。
ef不用非得用nuget安装,其实你引用那个dll效果是一样。
现在就是我上面的这个代码执行成功。为什么我sql 2008没生成相应的数据库呢?能给我解释下吗。谢谢了
@糯米粥: 按道理讲假如你安装了sql2008,会自动生成的。那你为什么不在你的config文件里显式的指定呢?
@文楚: 因为我是刚入门咯。就尝试下code first 的默认约定,问题我解决了,安装vs2012就给自动安装了localdb,因为我本地没 .\SQLEXPRESS,我那代码运行成功后,数据库就保存在localdb中了,如果想在sql可视化界面管理数据库的话,服务器名称要改成(localdb)\v110,身份验证为:windows身份验证就可以看到刚生成的数据库了,谢谢。
@糯米粥: 哦。弄错了。是(localdb)\v11.0
@糯米粥: 哦 恭喜你了。