You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MVC模型中EF更新数据库时自定义字段的保留方法

解决EF更新模型时保留自定义属性的问题

嘿,这个坑我踩过好多次了!直接在EDMX自动生成的类文件里加自定义代码肯定不行——每次执行「从数据库更新模型」,EF的T4模板都会重新生成那个类文件,你的代码自然就被覆盖了。

你之前尝试的分部类思路是对的,但可能用错了方式(元数据类确实只适合加数据注解)。正确的做法是创建一个独立的分部类文件,和自动生成的实体类在同一个命名空间下,把你的自定义属性放在这里:

具体步骤:

  1. 找到EF自动生成的实体类(一般在[你的模型名].Designer.cs文件里),确认它是partial类,比如:
    namespace YourProjectNamespace
    {
        public partial class Person
        {
            // EF自动生成的属性:FirstName、LastName等
            public string FirstName { get; set; }
            public string LastName { get; set; }
        }
    }
    
  2. 在同一个项目里新建一个类文件,比如命名为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:51:14