You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

ASP.NET MVC5:如何让Entity Framework忽略模型中的属性?

在Entity Framework Code-First中排除属性映射到数据库列

嗨,针对你的问题,我来给你梳理几种可行的方案,顺便解答你关于private关键字的疑问:

方法1:使用[NotMapped]数据注解特性

这是最直接的方式,只需要给你不想映射的属性加上[NotMapped]特性,EF就会在生成迁移和数据库表时忽略这些属性。修改后的模型代码如下:

using System.ComponentModel.DataAnnotations.Schema; // 需要引入这个命名空间

public class Class { 
    public int Id { get; set; } 
    [Required] 
    public int SkillId { get; set; } 
    public Skill Skill { get; set; } 
    [NotMapped] // 标记该属性不映射到数据库
    public string SelectedSkills { get; set; } 
    [NotMapped] // 同上
    public int Repeat { get; set; } 
}

方法2:使用Fluent API配置

如果你更倾向于将实体配置和模型类分离,可以在你的DbContext类的OnModelCreating方法中使用Ignore方法来排除属性:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    
    // 忽略SelectedSkills和Repeat属性
    modelBuilder.Entity<Class>()
        .Ignore(c => c.SelectedSkills)
        .Ignore(c => c.Repeat);
}

关于private关键字的疑问

使用private关键字确实能让EF不映射这个属性——因为EF默认只映射**公共(public)**的属性,私有属性不会被自动包含到数据库映射中。但这里有个关键问题:如果你把SelectedSkillsRepeat改成private,那么这些属性只能在Class类的内部被访问和修改,外部的业务逻辑、视图等都无法直接使用它们。

所以如果你的需求是保留属性的公共访问权限,但不映射到数据库,那private关键字就不适用了,还是用上面两种方法更合适。只有当你完全不需要在类外部访问这些属性时,private才是可选方案。

内容的提问来源于stack exchange,提问作者Mr Nobody

火山引擎 最新活动