一、问题描述
采用wtmplus开发,在线设计数据表与页面,同时能直接在线预览,效率非常的高。这次项目就是在线预览没有任何报错,下载了源码之后,我也是继续采用sqlite进行二次细节开发。同时,测试环境采用的是centos7+mysql5.6部署的。没有发现任何问题。结果,到了正式环境部署WindowsServer2016+Sqlserver2017,居然报错了。
具体错误信息是
System.AggregateException:?One?or?more?errors?occurred.?(将?FOREIGN?KEY?约束?'FK_AuditTrails_TechnologyInnovation_TechnologyInnovationId'?引入表?'AuditTrails'?可能会导致循环或多重级联路径。请指定?ON?DELETE?NO?ACTION?或?ON?UPDATE?NO?ACTION,或修改其他?FOREIGN?KEY?约束。
我第一时间询问度年该怎么解决,结果是一堆T-SQL处理办法,这种情况下。项目用EF启动,连表都没有,更别谈启动了。但是问题时找到了,sqlserver默认有ON DELETE NO ACTION 或 ON UPDATE NO ACTION限制,是可以关闭的。
二、解决办法
1、直接删除required
这时候和刘总请教得知,是定义外键的时候,设置required不为空导致的。
?解决办法也很简单,把required特性删除就完事了。
这种方式有个弊端,取消必填字段要求会导致业务逻辑问题。
2、重写OnModelCreating方法
经过群里大佬的指点,采用重写OnModelCreating方法,配置OnDelete(DeleteBehavior.NoAction)。
OnModelCreating的官方解释:在完成对派生上下文的模型的初始化后,并在该模型已锁定并用于初始化上下文之前,将调用此方法。 虽然此方法的默认实现不执行任何操作,但可在派生类中重写此方法,这样便能在锁定模型之前对其进行进一步的配置。通常,在创建派生上下文的第一个实例时仅调用此方法一次, 然后将缓存该上下文的模型,并且该模型适用于应用程序域中的上下文的所有后续实例另外在做数据库迁移生成迁移文件的时候也会调用OnModelCreating方法。通过在给定的 ModelBuidler 上设置 ModelCaching 属性可禁用此缓存,但注意这样做会大大降低性能。 通过直接使用 DbModelBuilder 和 DbContextFactory 类来提供对缓存的更多控制。
可以参照下面的博文,来具体解决。这篇博文https://www.cnblogs.com/seekdream/p/10641510.html
用wtmplus,对于新手来说是个很好的过度时期,在线可视化制作项目。同时,还能得到微软MVP刘亮的一对一指导,可以在一个相对舒服的环境里完成项目。
有兴趣的可以去wtmplus官网,体验一下.NET在线开发。传送门http://wtmplus.walkingtec.cn/index.html#/
|