c# - 如何使用 EF Database-First 方法来忽略影子属性以处理 Scaffold-DBContext 并生成单独的 Trackable 类
问题描述
我使用的是实体框架数据库优先方法,之前我使用了代码优先方法,并为公共属性创建了一个跟踪类,并从中继承所有实体,如下所示:
public abstract class Trackable
{
public int Id { get; set; }
public DateTime? CreatedDateTime { get; set; }
public DateTime? UpdatedDateTime { get; set; }
public int? CreatedUser { get; set; }
public int? UpdatedUser { get; set; }
}
public class User: Trackable
{
[Key]
public new int Id { get; set; }
[Required]
[StringLength(255)]
public string UserName { get; set; }
[Required]
public string FirstName { get; set; }
public string LastName { get; set; }
public bool IsActive { get; set; }
}
上面的代码生成的单个表具有 User 和 Trackable 类中存在的所有属性。现在我需要在使用 Database-First 方法时生成相同的输出(我的意思是类)。
我已经尝试过,但它生成了一个User类,该类具有数据库内表中存在的所有属性。
谁能指导我,我应该做些什么来达到与我所做的 Code-First 相同的预期结果?
解决方案
嗨@Muhammad Shahid Khan Afridi,</p>
上面的代码生成的单个表具有 User 和 Trackable 类中存在的所有属性。
根据您的课程,我在 DbContext 中添加了以下代码:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public DbSet<User> AppUsers { get; set; }
}
然后,首先使用 EF 代码进行迁移后,它将在数据库中创建一个 Users 表,如下所示:
谁能指导我,我应该做些什么来达到与我所做的 Code-First 相同的预期结果?
现在,您似乎想首先使用 EF 数据库生成相关类(具有继承),我假设您使用的是 ADO.Net 实体数据模型,如果是这种情况,在生成相关类之后,如您所说,我们只能在 .edmx 文件中获取单个 User 类,如下所示:
在这里您可以参考以下步骤来更改表格:
首先,右键单击用户实体,打开属性面板,更改“实体集名称”和“名称”属性。(将名称从“用户”更改为“DBF_Users”,这是为了防止Schema specified is not valid. Errors: The mapping of CLR type to EDM type is ambiguous because multiple CLR types match the EDM type 'User'
错误)。
之后保存更改(单击确定按钮):
然后,如下更改用户类(记得添加 Table 属性以映射数据库中的表)并保存更改:
之后,您可以参考以下代码来使用genrested 类:
推荐阅读
- python - 从烧瓶中的表单获取数据的问题
- python - 如何在 python 中生成 JWT 断言
- spring-batch - SQL [SELECT * FROM AH_PATIENT] 的未分类 SQLException;SQL状态[60000];错误代码[604];ORA-00604: 递归 SQL 级别 1 发生错误
- c# - Xamarin 表单中的可单击图像区域
- python - 如果网站没有让我保持登录状态,如何 requests.Session().get?
- c# - Autofac : 关于 OnActivating 和 OnActivated 的问题
- swift - 如何访问我的应用程序的自定义对象?
- c++ - 涉及 SFINAE 的重载 C++ 模板函数的地址
- java - sqoop:java.lang.NoClassDefFoundError:org/apache/hadoop/mapreduce/InputFormat
- python - 我在除以 2 代码时遇到问题