如何解决如何使用 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表,如下:
任何人都可以指导我我需要做什么才能实现 预期结果与我所做的 Code-First 的情况相同吗?
现在,您似乎要使用EF Database-first生成相关类(带继承),我假设您使用的是ADO.Net Entity Data Model,如果是这样,在生成相关类之后,如您所说,我们只能在 .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属性来映射数据库中的表)并保存更改:
之后,您可以参考以下代码来使用流派类:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。