当前位置: 首页 > 编程语言 > C#

如何在使用CodeFirstEF4.1保存时为属性添加默认值?分享

时间:2023-04-10 17:23:26 C#

使用CodeFirstEF4.1保存时如何为属性添加默认值?我开始创建这样的模型:publicabstractclassEditableBase{publicDateTimeCreatedOn{get;放;}publicDateTimeModifiedOn{get;放;}publicintCreatedBy{得到;放;}publicintModifiedBy{得到;放;}}publicclassProject:EditableBase{publicintProjectId{get;放;}publicstringProjectName{get;放;我在应用程序启动时使用这一行:Database.SetInitializer(newDropCreateDatabaseIfModelChanges());上面提到的所有属性都是列的表......这正是我想要的。但是,现在我需要在DbContext上发出SaveChanges()时填充一些默认值。保存时,我需要使用适当的值更新ModifiedOn和ModifiedBy属性。通常,我至少会在数据库端(触发器或存储过程)强制执行DateTime值,但这显然不是一个选项,因为数据库会在类更改时删除。由于我先编写代码,所以我没有可以调整属性的模型设计器。我想要做的是向EditableBase类添加一个方法,该方法在执行SaveChanges()时被调用,从而将所有逻辑保存在一个地方。是否有可能做到这一点?实现我的目标的最佳方式是什么?在派生的DbContext中覆盖SaveChanges:publicoverrideintSaveChanges(){foreach(ChangeTracker.Entries()中的varentry){if(entry.State==EntityState.Added){entity.CreatedOn=...;entity.CreatedBy=...;}elseif(entry.State==EntityState.Modified){entity.ModifiedOn=...;entity.ModifiedBy=...;}}返回base.SaveChanges();我只是不确定GenericEntries是否会直接与您的基本类型一起使用,因为它实际上并不映射到基本实体。还有一个非通用版本,因此您可以将其重写为更复杂的linq查询或测试循环中每个条目的实体类型。那么,您可以完全控制实体的代码。我认为您可能想要实施像IPropertyChanged这样的模式来更新您的属性。您是否考虑过这篇文章中的这两个选项,您对setter(或构造函数)做了什么?默认属性解决方案似乎不错。以上是C#学习教程:HowtoaddadefaultvaluetoapropertywhensavingwithCodeFirstEF4.1?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: