微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 EF Database-First 方法忽略阴影属性,用于 Scaffold-DBContext 并生成单独的可跟踪类

如何解决如何使用 EF Database-First 方法忽略阴影属性,用于 Scaffold-DBContext 并生成单独的可跟踪类

我使用的是实体框架数据库优先方法,之前我使用了代码优先方法并为通用属性创建了一个跟踪类,并从中继承了所有实体,如下所示:

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 类中存在的所有属性。 现在我需要在使用数据库优先方法生成相同的输出(我的意思是类)。

我已经尝试过,但它生成一个 User 类,其中包含数据库内表中存在的所有属性

谁能指导我,我应该怎样做才能达到与我已经完成的 Code-First 相同的预期结果?

解决方法

嗨@Muhammad Shahid Khan Afridi,

上面的代码生成了一个表,所有的属性都存在于 用户以及可跟踪类。

根据您的类,我在 DbContext 中添加了以下代码:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public DbSet<User> AppUsers { get; set; }
}

然后,先用EF代码迁移后,会在数据库中创建一个Users表,如下:

enter image description here

任何人都可以指导我我需要做什么才能实现 预期结果与我所做的 Code-First 的情况相同吗?

现在,您似乎要使用EF Database-first生成相关类(带继承),我假设您使用的是ADO.Net Entity Data Model,如果是这样,在生成相关类之后,如您所说,我们只能在 .edmx 文件中获取单个 User 类,如下所示:

enter image description here

在这里您可以参考以下步骤来更改表格:

首先,右键单击用户实体,然后打开属性面板,更改“实体集名称”和“名称”属性。(将名称从“用户”到“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' 错误)。

enter image description here

之后保存更改(单击“确定”按钮):

enter image description here

然后,更改用户类如下(记得添加Table属性来映射数据库中的表)并保存更改:

enter image description here

之后,您可以参考以下代码来使用流派类:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。