Entity Framework使用心得

63 篇文章 0 订阅
34 篇文章 0 订阅

首先最给力的教程附上:www.entityframeworktutorial.net

其实照着教程一步一步来的。

首先建立Email类。然后再该类最下面写一个相应的Context类,并且一开始我就用的 :base("数据库名字")。然后就可以直接运行了。其实数据库会新建到默认的connectionString里。那么默认的connectionString在哪里呢?其实并不在我的类库project的app.config当中,而是在我的启动project的app.config当中。

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>

所以其实就是 (localdb)\mssqllocaldb的数据库中。但是有很多人说在 (localdb)\v11.0或者在 (localdb)\sqlexpress中,这都是有可能的,如果他安装了Express的话。

还有一种方法可以知道到底存到哪里去了,那就是查看本地的实例有哪些。


巨坑爹的是x64的程序会有问题,查了一下,确实有问题=_=||,详见:http://entityframework.codeplex.com/workitem/2273

所以就把所有x64的程序在解决方案的属性设置里build的勾勾都去掉了。


然后成功了。数据库里有数据了。


但是到了公司电脑上就完蛋了。原因是我当时不太会migration,总是依赖于开启自动迁移。但是自动迁移他不work!!!

不过后来学会了怎么迁移。其实也弱智的。

首先我在consoleTest的工程(启动工程)的App.config当中设置好我的connectionString,然后把DBContext继承的基类的构造函数里的参数改成了:base("name=xxxxconnectionString")要和config当中的一致。
下面注释掉的是我以前的,没注释的是改过了的,此时localhost存在,而数据库EnronKB不存在,当然存在不存在影响不大,迁移的时候ef会判断。

  <connectionStrings>
    <!--add name="EnronKBConnectionString" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=EnronKB;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/-->
    <add name="EnronKBConnectionString" connectionString="Data Source=localhost;Initial Catalog=EnronKB;Persist Security Info=True;User ID=sa;Password=hello1234!" providerName="System.Data.SqlClient"/>
  </connectionStrings>

改完了之后,我最经常干的一件事就是打开package manager console然后输入

 Add-Migration Init回车

然后start工程,一切搞定,下次如果有更改我一般都直接到数据库中删除掉所有新建的表,然后再回到package manager console然后输入Add-Migration Init回车这一步。(貌似有好方法我还尝试,要组会啦,能交差就行了)

最后呢,当数据库一切定型了,我就可以turn off initializer了,不然每次启动工程都要好久好久。


其中还用到了一些小技术,这都在最开头的教程中又说。不看不知道一看吓一跳。比如自动键值。


另外,非常坑爹的一点,用了ef,数据库已经填了很多,编译会异常漫长。

解决办法是:新建临时数据库Temp,将connectionString指向Temp,就好了。(猜测EF会在项目编译时把数据库扫一遍)


最后我的类附上:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Forest.CMU
{
using System.Data.Entity;    
using System.ComponentModel.DataAnnotations;
    public class Email
    {
        public Email()
        {
            EmailID =-1;
            Message_ID ="";.....................
        }
        [Key]
        public int EmailID { get; set; }
        public string Message_ID { get; set; }..............................
    }


    public class EnronKBContext : DbContext
    {
        public EnronKBContext()
            //: base("EnronKB")
            : base("name=EnronKBConnectionString")
        {
        }
        public DbSet<Email> Emails { get; set; }
    }
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值