EF Code First 通过 DataAnnotations 或 fluent API 进行自我评价

18666

我有一节课:

[Table(nameof(User), Schema = "Administration")]
public class User : IBaseModel
{
    [Key]
    public int UserId { get; set; }

    #region IBaseModel

    public int AddedBy { get; set; }
    [ForeignKey("AddedBy")]
    public virtual User UserAddedBy { get; set; }

    public int ModifiedBy { get; set; }
    [ForeignKey("ModifiedBy")]
    public virtual User UserModifiedBy { get; set; }

    #endregion
}

我尝试为此表创建自我关系(谁添加了和谁修改了项目)

当我的班级看起来像上面那样并且我尝试Add-Migration init在包管理器控制台上使用时,它返回错误:

无法确定类型“abc.Administration.User”和“abc.Administration.User”之间关联的主体端。必须使用关系流畅 API 或数据注释显式配置此关联的主体端。

在这个错误之后,我尝试使用 fluent API 和方法OnModelCreating(在我的上下文中)我写道:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Administration.User>().HasOptional(e => e.UserAddedBy).WithMany().HasForeignKey(m => m.AddedBy);
        modelBuilder.Entity<Administration.User>().HasOptional(e => e.UserModifiedBy).WithMany().HasForeignKey(m => m.ModifiedBy);
    }

再次尝试,Add-Migration init但我再次看到错误消息:

在模型生成期间检测到一个或多个验证错误:

abc.User_UserAddedBy:: 多重性与关系“User_UserAddedBy”中的角色“User_UserAddedBy_Target”中的引用约束冲突。因为从属角色中的所有属性都是不可为空的,所以主体角色的多重性必须为“1”。abc.User_UserModifiedBy:: 多重性与关系“User_UserModifiedBy”中的角色“User_UserModifiedBy_Target”中的参照约束冲突。因为从属角色中的所有属性都是不可为空的,所以主体角色的多重性必须为“1”。

Required在虚拟属性之前找到了要添加到属性的信息,但没有帮助。

伊马克

根据提供的说明,您可以执行以下操作:

  1. 禁用强制外键(FK)
  2. 添加一个虚拟用户,你可以使用像“系统”这样的名字,给它一个像-1这样的不可能的ID。
  3. 使系统成为它自己的 UserAddedBy 和 UserModifiedBy
  4. 启用强制 FK。现在您可以使用 System 添加用户作为他们的 UserModifiedBy 和 UserAddedBy。

这样,用户中唯一“被欺骗”的将是 System,在我看来,这是一个不错的权衡。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

EF Code First Fluent API-级联删除

来自分类Dev

EF Code First Fluent API,指定外键属性

来自分类Dev

在集合中获取类实例-EF Code First Fluent API

来自分类Dev

使用 Fluent Mappings 逆向工程 Ef Code First

来自分类Dev

我如何使用Fluent API使用Entity Framework Code First映射到查找表

来自分类Dev

使用 Fluent API 的 EF 6 Code First 关系。如何设置第一个和第三个表之间的关系或获取分组集合

来自分类Dev

EF6 Code First和通过注释进行映射,如何构建配置?

来自分类Dev

EF6:访问通过代码优先fluent API生成的映射表

来自分类Dev

通过Fluent API对所有EF上下文类使用Table-Per-Type

来自分类Dev

当通过 Fluent API 定义 EF 映射中的哪个子属性应该被忽略时,抛出 ArgumentException

来自分类Dev

通过EF 6 / Code First键查找本地缓存的实体

来自分类Dev

通过EF Core + Code First +迁移创建数据库

来自分类Dev

如何优化我的EF Code First查询?

来自分类Dev

使用Fluent API的EF外键

来自分类Dev

使用Fluent API的EF外键

来自分类Dev

使用 EF Core Code First 和 IdentityUser 的 .Net Core API

来自分类Dev

使用Entity Framework 6.0,Fluent API和DataAnnotations重用一列作为必需属性

来自分类Dev

使用Entity Framework Code First和Fluent API配置许多一对一关系

来自分类Dev

如何使用带有Fluent API的Entity Framework Code First映射到查找表

来自分类Dev

使用现有Db进行EF Fluent api poco基因的提取和作图

来自分类Dev

EF Fluent API一对多关系。我应该在哪端定义它?

来自分类Dev

如何在 MVC5 上的 Database First EF 6 中为日期设置 DataAnnotations

来自分类Dev

在EF 6 Fluent API中从CRUD读取地图

来自分类Dev

如何使用EF 6.1 Fluent API创建空间索引

来自分类Dev

Map Read from CRUD in EF 6 Fluent API

来自分类Dev

EF Fluent Api是否可以设置最小长度?

来自分类Dev

在EF 6 Fluent API中从CRUD读取地图

来自分类Dev

EF6 one-to-many fluent api with navigation properties

来自分类Dev

使用EF Fluent API映射我的实体关系时,我是否需要同时映射涉及的两个实体?

Related 相关文章

  1. 1

    EF Code First Fluent API-级联删除

  2. 2

    EF Code First Fluent API,指定外键属性

  3. 3

    在集合中获取类实例-EF Code First Fluent API

  4. 4

    使用 Fluent Mappings 逆向工程 Ef Code First

  5. 5

    我如何使用Fluent API使用Entity Framework Code First映射到查找表

  6. 6

    使用 Fluent API 的 EF 6 Code First 关系。如何设置第一个和第三个表之间的关系或获取分组集合

  7. 7

    EF6 Code First和通过注释进行映射,如何构建配置?

  8. 8

    EF6:访问通过代码优先fluent API生成的映射表

  9. 9

    通过Fluent API对所有EF上下文类使用Table-Per-Type

  10. 10

    当通过 Fluent API 定义 EF 映射中的哪个子属性应该被忽略时,抛出 ArgumentException

  11. 11

    通过EF 6 / Code First键查找本地缓存的实体

  12. 12

    通过EF Core + Code First +迁移创建数据库

  13. 13

    如何优化我的EF Code First查询?

  14. 14

    使用Fluent API的EF外键

  15. 15

    使用Fluent API的EF外键

  16. 16

    使用 EF Core Code First 和 IdentityUser 的 .Net Core API

  17. 17

    使用Entity Framework 6.0,Fluent API和DataAnnotations重用一列作为必需属性

  18. 18

    使用Entity Framework Code First和Fluent API配置许多一对一关系

  19. 19

    如何使用带有Fluent API的Entity Framework Code First映射到查找表

  20. 20

    使用现有Db进行EF Fluent api poco基因的提取和作图

  21. 21

    EF Fluent API一对多关系。我应该在哪端定义它?

  22. 22

    如何在 MVC5 上的 Database First EF 6 中为日期设置 DataAnnotations

  23. 23

    在EF 6 Fluent API中从CRUD读取地图

  24. 24

    如何使用EF 6.1 Fluent API创建空间索引

  25. 25

    Map Read from CRUD in EF 6 Fluent API

  26. 26

    EF Fluent Api是否可以设置最小长度?

  27. 27

    在EF 6 Fluent API中从CRUD读取地图

  28. 28

    EF6 one-to-many fluent api with navigation properties

  29. 29

    使用EF Fluent API映射我的实体关系时,我是否需要同时映射涉及的两个实体?

热门标签

归档