从 EF 视图到 EF 表的关系
Posted
技术标签:
【中文标题】从 EF 视图到 EF 表的关系【英文标题】:Relationships from EF View to EF Table 【发布时间】:2020-02-27 22:11:49 【问题描述】:我已成功创建映射到我的视图的 EF Core。如何将视图关系添加到我的其他实体类?
这是视图:
public class AppUserClaim
[Key]
public int ClaimId get; set;
public string ClaimType get; set;
public int AppUserId get; set;
public string AppUserDisplayName get; set;
public string FriendlyClaimName get; set;
在我的 DBContext 中
protected override void OnModelCreating(ModelBuilder modelBuilder)
modelBuilder
.Entity<AppUserClaim>(appUserClaim =>
appUserClaim.HasNoKey();
appUserClaim.ToView("View_AppUserClaims");
);
我现在希望能够以这样的方式将关系添加到我的用户类,但它不起作用。
我收到此错误:
无法确定“ICollection”类型的导航属性“AppUser.AppUserClaims”表示的关系。手动配置关系,或使用“[NotMapped]”属性或使用“OnModelCreating”中的“EntityTypeBuilder.Ignore”忽略此属性。
这就是我尝试将关系添加到我的 AppUserClass 的方式:
public ICollection<AppUserClaim> AppUserClaims get; set;
【问题讨论】:
您能解释一下“将关系添加到我的其他实体类的视图”是什么意思吗?我不明白。您想将AppUserClaim
作为关系属性添加到每个类吗?
从我的用户类中,我想访问 UserClaims 集合,如底部所示。用法等于: foreach(AppUserClaim c in appUser.AppUserClaims) 不是 100% 肯定,但我认为这样的事情应该可行。
protected override void OnModelCreating(ModelBuilder modelBuilder)
var table1Entity = modelBuilder.Entity<Table1>();
table1Entity.ToTable(nameof(Table1));
table1Entity.HasKey(i => i.Id);
table1Entity.Property(i => i.Id).UseSqlServerIdentityColumn();
var view1Query = modelBuilder.Query<View1>(); // we assume this view already exists in the DB
view1Query.ToView(nameof(View1));
view1Query.HasOne(i => i.Table1).WithMany().HasForeignKey(i => i.Table1Id);
其中 Table1 是表实体,View1 是视图实体。
这应该在你的表格和你的视图之间添加一个关系。
【讨论】:
以上是关于从 EF 视图到 EF 表的关系的主要内容,如果未能解决你的问题,请参考以下文章