EntityFramework 数据库第一个具有自定义构造函数的实体

问题描述 投票:0回答:1

我有使用代码优先方法的实体框架的经验,但现在我需要第一次使用数据库优先方法。 我得到了这样的实体:

[Table("Users")]    
public class User {
        [Key]
        public int Id { get; set; }
        [StringLength(40)]
        public string Name { get; set; }
        [StringLength(40)]
        public string Surname { get; set; }
        public string Login { get; set; }
        public string Password { get; set; }
        public bool IsDeleted { get; set; }
        [ForeignKey("UserTypeId")]
        public virtual UserType UserType { get; set; }
    }

我想向这个实体添加自定义构造函数,所以我添加了如下内容:

public User() { }
public User(string username) => Login = username;

添加构造函数后(上面的只是示例),我收到一个错误,我的代码没有反映数据库结构。 我无法更新此数据库结构,但在实体中使用自定义构造函数将使我的代码更加简单和全面。是否有任何选项可以向该实体添加自定义构造函数或方法,而无需更新数据库结构?

编辑:
确切的错误是:

System.InvalidOperationException: The model backing the 'DataContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).

我确信除了添加构造函数之外,我的实体没有其他任何更改。

c# entity-framework entity-framework-6
1个回答
-1
投票

是的,您可以向实体添加自定义构造函数或方法,而不会影响 Entity Framework (EF) Core 中的数据库结构。您看到的错误可能与您添加的构造函数无关。

  1. 构造函数:EF Core 在从数据库中具体化数据时主要使用无参数构造函数来创建实例。你可以有额外的构造函数;只需确保您始终拥有一个无参数的即可。
  2. 方法:您可以向实体添加任何自定义方法。 EF Core 不关心这些,除非您尝试将它们转换为 SQL(例如,在查询中)。

如果您在添加构造函数后看到错误,请确保:

  • 您仍然拥有无参数构造函数。
  • 您尚未进行可能影响模型与数据库兼容性的其他更改。

进一步诊断:

  1. 检查确切的错误消息。
  2. 再次使用
    Scaffold-DbContext
    命令(或 dotnet CLI 中的等效命令)以确保您的模型与数据库同步。
  3. 确保错误确实与构造函数相关,而不是其他更改。

总之:是的,您可以添加自定义构造函数和方法,而不会影响数据库。确保模型的其他方面仍然与数据库架构匹配。

© www.soinside.com 2019 - 2024. All rights reserved.