MVC模型中EF更新数据库时自定义字段的保留方法
解决EF更新模型时保留自定义属性的问题
嘿,这个坑我踩过好多次了!直接在EDMX自动生成的类文件里加自定义代码肯定不行——每次执行「从数据库更新模型」,EF的T4模板都会重新生成那个类文件,你的代码自然就被覆盖了。
你之前尝试的分部类思路是对的,但可能用错了方式(元数据类确实只适合加数据注解)。正确的做法是创建一个独立的分部类文件,和自动生成的实体类在同一个命名空间下,把你的自定义属性放在这里:
具体步骤:
- 找到EF自动生成的实体类(一般在
[你的模型名].Designer.cs文件里),确认它是partial类,比如:namespace YourProjectNamespace { public partial class Person { // EF自动生成的属性:FirstName、LastName等 public string FirstName { get; set; } public string LastName { get; set; } } } - 在同一个项目里新建一个类文件,比如命名为
Person.Custom.cs(名字随便取,只要和自动生成的类名对应就行),然后在里面写分部类扩展:namespace YourProjectNamespace // 必须和自动生成的类同命名空间 { public partial class Person { public string FullName { get { return FirstName + " " + LastName; } } } }
这样一来,不管你多少次执行「从数据库更新模型」,EF只会覆盖自动生成的.Designer.cs文件,你的Person.Custom.cs完全不受影响,FullName属性也会一直存在。
至于你提到的视图模型,确实是另一种方案——把需要的属性封装到视图模型里,和实体类解耦,但如果只是想给实体类加个计算属性,用分部类扩展是最直接省心的方式。
内容的提问来源于stack exchange,提问作者SK2017
相关产品推荐
相关产品推荐

