一、FluentAPI:
1、基本配置:
namespace ConsoleApp14.ModelConfig
{
public class PersonConfig: EntityTypeConfiguration<Person>
{
//继承自EntityTypeConfiguration,并将Person传进来
public PersonConfig()
{
this.ToTable("T_Persons");
}
}
}
public class TestDbContext:DbContext
{
public TestDbContext():base("name=connstr")//name=connstr 表示使用连接字符串中名字为connstr的数据库
{
}
public DbSet<Person> Persons { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
//用法一:从本程序集中加载所有继承自EntityTypeConfiguration类的配置
modelBuilder.Configurations.AddFromAssembly(
Assembly.GetExecutingAssembly());
//用法二: 从指定的程序集中加载所有的继承自EntityTypeConfiguration类的配置
// modelBuilder.Configurations.AddFromAssembly(
// Assembly.Load("ModelConfig"));
//用法三:
// modelBuilder.Entity<Person>().ToTable("T_Person");
//用法四:
// modelBuilder.Configurations.Add(new PersonConfig());
}
}
二、EF增删查改:
获取Dbset除了可以ctx.Persons之外,还可以ctx.Set<Person>()
1、增加:ctx.Persons.Add(p1) ; ctx.SaveChange();
2、删除:先查询出要删除的数据,然后Remove。这种方式问题最少,虽然性能低,但是删除操作一般不频繁,不用考虑性能。
using (TestDbContext ctx = new TestDbContext())
{
var ps= ctx.Persons.Where(p => p.Id ==3).SingleOrDefault();
if(ps==null)
{
Console.WriteLine("没有ID为3的人");
}
else
{
ctx.Persons.Remove(ps); //单个删除
}
}
var ps= ctx.Persons.Where(p => p.Id >3);
ctx.Persons.RemoveRange(ps); //批量删除
3、改:先查询出来,然后修改数据,最后SaveChange()
4、查询:因为Dbset实现了IQueryable 接口,而IQueryable 继承了IEnumerable接口,所以可以使用Linq、Lambda操作。
EF调用Skip之前必须调用OrderBy,不然会报错
来源:oschina
链接:https://my.oschina.net/u/4265383/blog/3887383