ef来自数据库的codefrist修改数据库时怎么更新
选择开始菜单中→程序→ManagementSQLServer2008→SQLServerManagementStudio命令,打开SQLServerManagementStudio窗口,并使用Windows或SQLServer身份验证建立连接。
在对象资源管理器窗口中展开服务器,然后选择数据库节点
右键单击数据库节点,从d出来的快捷菜单中选择新建数据库命令。
最近在项目中使用EF Core的频率越来越高,当项目比较大的时候,疯狂往DbContext中加各种DbSet,你会不会特难受?如果你是一键生成的大佬,那么请忽略本文。本文旨在不写 DbSet,那么就撸起柚(xiu)子干吧
正经事
1 约定规则
首先,为了达到偷懒的目的,我们得事先约定些规则,毕竟无规矩不成方圆。具体规则可以自定义,比如我目前的规则就是在数据表对应的实体类加上些特有的Attribute,比如现成的DbContextAttribute,这个Attribute的具体作用请参考MSDN官方文档。
View Code
OK,规则我们约定好了,下面进行下一步。
2 重写数据库上下文的OnModelCreating方法
先上代码为敬:
View Code
到此,或许已经明白,重要的只有一句:只要在 ModelBuilderModel 中注册我们的数据表实体类就可以代替万千DbSet了。
结束语
本次分享就到此结束,不妨亲自试试。以上代码可以在我的个人开源项目 ZxwFrameworkNetCore中找到,如果本项目对您有帮助,请给个star或者支持下自家土蜂蜜吧,也诚挚欢迎各路大佬提出建议以及批评指正。
标签: entity framework core
更新的应该是debug下面的mdf,而VS每次编译时候会自动把项目里的mdf复制到debug下
编译好后,不用vs,直接运行debug下的exe,然后 *** 作更新数据库,就应该改变了。
如果你再次运行exe,就应该和上次关闭时的结果一样
你好,具体解答如下希望可以帮到您:
本次需求我们以mysql作为测试数据库,然后使用efcore6作为数据库驱动orm来实现怎么处理才能达到这个效果的分表分库(本次只涉及分表)。
新建一个项目
添加依赖
//请安装最新版本第一个版本号6代表efcore的版本号
Install-Package ShardingCore -Version 6434
Install-Package MicrosoftEntityFrameworkCoreSqlServer -Version 601
新建一个对象表,配置对应的数据库映射关系并且关联到dbcontext
//创建数据库对象
public class OrderByHour
{
public string Id { get; set; }
public DateTime CreateTime { get; set; }
public string Name { get; set; }
}
//映射对象结构到数据库
public class OrderByHourMap:IEntityTypeConfiguration<OrderByHour>
{
public void Configure(EntityTypeBuilder<OrderByHour> builder)
{
builderHasKey(o => oId);
builderProperty(o => oId)IsRequired()HasMaxLength(50);
builderProperty(o => oName)IsRequired()HasMaxLength(128);
builderToTable(nameof(OrderByHour));
}
}
//创建dbcontext为efcore所用上下文
public class DefaultDbContext:AbstractShardingDbContext,IShardingTableDbContext
{
public DefaultDbContext(DbContextOptions<DefaultDbContext> options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
baseOnModelCreating(modelBuilder);
modelBuilderApplyConfiguration(new OrderByHourMap());
}
public IRouteTail RouteTail { get; set; }
}
到这边其实只需要启动时候依赖注入
servicesAddDbContext<DefaultDbContext>(o=>oUseMySql(xxxx));
那么efcore就可以运行了,这么一看其实并没有很复杂而且IEntityTypeConfiguration也不是必须的,efcore允许使用attribute来实现
当然DefaultDbContext:AbstractShardingDbContext,IShardingTableDbContext这一部分在原生efcore中应该是DefaultDbContext:DbContext
创建分片路由
首先我们来看一下ShardingCore针对分片路由的自定义情况的分析,通过文档我们可以了解到,如果想要使用自定义路由那么你只需要自己新建一个路由并且继承实现AbstractShardingOperatorVirtualTableRoute,当然这是分表的,分库是AbstractShardingOperatorVirtualDataSourceRoute
接下来我们新建一个路由并且实现分表 *** 作。
public class orderByHourRoute : AbstractShardingOperatorVirtualTableRoute<OrderByHour, DateTime>
{
public override string ShardingKeyToTail(object shardingKey)
{
throw new NotImplementedException();
}
public override List<string> GetAllTails()
{
throw new NotImplementedException();
}
public override void Configure(EntityMetadataTableBuilder<OrderByHour> builder)
{
throw new NotImplementedException();
}
public override Expression<Func<string, bool>> GetRouteToFilter(DateTime shardingKey, ShardingOperatorEnum shardingOperator)
{
throw new NotImplementedException();
}
}
接下来我们依次来实现并且说明各个接口。
ShardingKeyToTail:将你的对象转成数据库的后缀尾巴,比如你是按月分片,那么你的分片值大概率是datetime,那么只需要datetimeToString("yyyyMM")就可以获取到分片后缀
GetAllTails:返回集合,集合是数据库现有的当前表的所有后缀,仅程序启动时被调用,这个接口就是需要你返回当前数据库中当前表在系统里面有多少张表,然后返回这些表的后缀
Configure:配置当前对象按什么字段分片
GetRouteToFilter:因为ShardingCore内存有当前所有表的后缀,假设后缀为list集合,返回的Expression<Func<string, bool>>在经过And、Or后的组合进行Compile(),然后对listWhere(expressionCompile())ToList()就可以返回对应的本次查询的后缀信息
废话不多说针对这个条件我们直接开始 *** 作完成路由的实现
efcore7连接出错
可能的原因:
1、先确保连接线正常,不用EOS Utility,电脑能识别相机吗?
2、CF卡正常吗?(格式化之后再用EOS Utility试试)。
3、相机固件更新,官网上可以下载最新固件。
4、软件版本过老,70D是新机器,需要新版本软件私服,你是64位系统,最好安装64位的EOS Utility。一定要彻底删除软件,手动删除软件所在文件夹,之后再重新安装。
以上就是关于c#EF数据库连接(c罗)全部的内容,包括:c#EF数据库连接(c罗)、EF Core 的 DbSet 有什么用、使用ef框架连接数据库,本来可以,但修改了数据库表后连不上了,也没报错等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)