【问题标题】:Relationships from EF View to EF Table从 EF 视图到 EF 表的关系
【发布时间】: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){ @c.ClaimType @c.ClaimId }

标签: c# entity-framework-core sql-view


【解决方案1】:

不是 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 是视图实体。

这应该在你的表格和你的视图之间添加一个关系。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 2023-03-15
    • 2021-06-15
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    相关资源
    最近更新 更多