【问题标题】:Data Annotation table columns数据注释表列
【发布时间】:2017-06-07 04:38:40
【问题描述】:
public partial class Employee
{     
    public int Emp_Id { get; set; }
    public string Emp_Name { get; set; }
    public string Emp_City { get; set; }
    public Nullable<int> Emp_Age { get; set; }
}

这是使用 EF 为表 Employee 生成的类。我想在应用程序中将Emp_Name 更改为EmpName 而无需更改表结构。但是使用以下更改使用数据注释dbEntity.Set&lt;Employee&gt;().ToList(); 获取异常

"实体类型Employee不是当前模型的一部分 上下文。”

System.InvalidOperationException。

如何解决这个问题

public partial class Employee
{ 
    public int Emp_Id { get; set; }
    [Column("Emp_Name")]
    public string EmpName { get; set; }
    public string Emp_City { get; set; }
    public Nullable<int> Emp_Age { get; set; }
}

【问题讨论】:

标签: c# asp.net-mvc asp.net-mvc-4 entity-framework-6


【解决方案1】:

您不需要更改列的名称。您可以像这样轻松使用[Display][DisplayName] 属性:

首先将using System.ComponentModel.DataAnnotations; 添加到您的 using 指令中:

[Display(Name = "EmpName")]
public string Emp_Name { get; set; }

或者:

[DisplayName("EmpName")]
public string Emp_Name { get; set; }

【讨论】:

  • 想将属性名设为EmpName ,并在项目中到处使用,
  • @safeenarasak 在您使用Emp_Name 的每个视图中都显示为EmpName。所以你会得到你想要的结果。
  • ` IEnumerable ds = return dbEntity.Set().ToList(); foreach (var x in ds) { string name = x.Emp_Name.ToString(); }` 这里我要 `string name = x.EmpName.ToString();`
  • @S.Akbari Display 属性用于 UI,OP 想要重命名该属性以便在代码中使用。
  • @safeenarasak Display 属性仅在视图中受到影响。
【解决方案2】:

您似乎正在使用数据库优先方法。执行以下操作以更改属性名称而不更改列名:

  1. 只需双击您的.edmx 文件,它就会显示表格。
  2. 找到您的餐桌,right click the column name &gt; Rename
  3. 给它一个您选择的新名称

它将保留此名称,如果您更新 EDMX,它仍将保留它。但是,如果您删除 EDMX 并重新生成它,则需要再次进行重命名。

【讨论】:

    【解决方案3】:

    含义:

    实体类型Employee 不是当前模型的一部分 上下文。

    例外是dbcontext 不知道Employee 类型,您需要向dbContext 注册它

    public class MyDbContext : DbContext
    {
        public DbSet<Employee> Employees {get; set;}
    }
    

    MyDbContext 是您的dbContext 类,您需要定义employee 类型的dbset,在您的context 中覆盖DbContextOnModelCreating 方法,如下所示:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Employee>().ToTable("Employee");
    }
    

    如果您出于显示目的更改名称,则可以使用DisplayDisplayName 作为S.Akbari 在他的answer 中提到的@。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-07
      • 2011-04-04
      • 2011-10-18
      • 2021-11-06
      • 1970-01-01
      • 2011-06-18
      • 1970-01-01
      • 2016-06-26
      相关资源
      最近更新 更多