首页 新闻 会员 周边

请教个EF code first DbContext问题

0
悬赏园豆:20 [已解决问题] 解决于 2013-01-28 11:11

一个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类

View Code
/// <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

View Code
/// <summary>
    /// Context
    /// </summary>
    public class BreakAwayContext : DbContext
    {
        public DbSet<Destination> Destinations { get; set; }
        public DbSet<Lodging> Lodgings { get; set; }
    } 

 

Main

View Code
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();
        }
糯米粥的主页 糯米粥 | 初学一级 | 园豆:22
提问于:2013-01-26 21:22
< >
分享
最佳答案
0

你可以这么认为,当你计算机中有本地数据库比如你安装了sql2008那它就会自动认为这个是你的数据库,没有话连接sql exress,再没有连接localdb,localdb是属于sql2012的一个比sql express更轻量级的数据库。

ef不用非得用nuget安装,其实你引用那个dll效果是一样。

收获园豆:20
为森 | 小虾三级 |园豆:579 | 2013-01-27 01:44

现在就是我上面的这个代码执行成功。为什么我sql 2008没生成相应的数据库呢?能给我解释下吗。谢谢了

糯米粥 | 园豆:22 (初学一级) | 2013-01-27 14:57

@糯米粥: 按道理讲假如你安装了sql2008,会自动生成的。那你为什么不在你的config文件里显式的指定呢?

为森 | 园豆:579 (小虾三级) | 2013-01-28 00:02

@文楚: 因为我是刚入门咯。就尝试下code first 的默认约定,问题我解决了,安装vs2012就给自动安装了localdb,因为我本地没 .\SQLEXPRESS,我那代码运行成功后,数据库就保存在localdb中了,如果想在sql可视化界面管理数据库的话,服务器名称要改成(localdb)\v110,身份验证为:windows身份验证就可以看到刚生成的数据库了,谢谢。

糯米粥 | 园豆:22 (初学一级) | 2013-01-28 11:10

@糯米粥:  哦。弄错了。是(localdb)\v11.0

糯米粥 | 园豆:22 (初学一级) | 2013-01-28 11:19

@糯米粥: 哦 恭喜你了。

为森 | 园豆:579 (小虾三级) | 2013-01-28 12:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册