无法使用 Fluent API 为可审计实体配置关系

问题描述 投票:0回答:2

我正在为我的项目使用 asp.net 样板模板。

看起来更喜欢使用数据注释而不是流畅的 API。

我喜欢使用 Fluent API,因为它非常干净。

但是当我尝试为我的实体使用 Fluent API 时它工作正常,但是当我开始使用像

Auditable
实体这样的 abp 框架中的实体时,我无法添加迁移,因为它要求我配置关系对于
CreatorUser
,它在
Auditable
实体中定义并使用数据注释进行映射。

我仍然能够配置

CreatorUser
,但最终从另一个表中删除了
CreatorUser
的 FK 并重新创建它。

这就是我的实体的配置方式。让我知道是否有人能够在 aspnetboiler 板中使用流畅的 API。

    public class ItemGroup : FullAuditedEntity<int,AbpUser<User>>
        {
            public string Name { get; set; }
            public string Description { get; set; }
    
            //[ForeignKey("Id")]
            public int? ParentItemGroupId { get; set; }
            public virtual ItemGroup ParentItemGroup { get; set; }
            public virtual ICollection<ItemGroup> ItemGroups { get; set; }
    
            //public virtual AbpUser<User> CreatorUser { get; set; }
            //To-Do : Need to add parent itemgroup id, but self referencing is not supported in abpframework/EFCore, need to solve this and add it later.
        }
    
        public class ItemGroupEntityConfiguration : IEntityTypeConfiguration<ItemGroup>
        {
    
            public void Configure(EntityTypeBuilder<ItemGroup> builder)
            {
                builder.ToTable("ItemGroups");
                builder.HasOne(x => x.ParentItemGroup).WithMany(x => x.ItemGroups).HasForeignKey(b => b.ParentItemGroupId);
                builder.HasOne(x => x.CreatorUser).WithMany().HasForeignKey(i => i.CreatorUserId);
            }
        }
aspnetboilerplate abp
2个回答
1
投票

AbpUser 是一个抽象类。你应该传递那个类的实现。

public abstract class AbpUser<TUser> : AbpUserBase, IUser<long>, IFullAudited<TUser>
    where TUser : AbpUser<TUser>

0
投票

最后我找到了解决方案。这是我犯的非常愚蠢的错误。我没有调用 base.OnModelCreating,所以它无法配置关系。在此之后我能够运行迁移。

也像上面提到的jonas,我传递的是User,而不是AbpUser。事实上,我也不需要传递 User ,因为我不需要 User 导航属性,所以它没有用户就可以找到。

© www.soinside.com 2019 - 2024. All rights reserved.