Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF代码通过DataAnnotations或fluent API进行首次自评_C#_Entity Framework_Ef Code First - Fatal编程技术网

C# EF代码通过DataAnnotations或fluent API进行首次自评

C# EF代码通过DataAnnotations或fluent API进行首次自评,c#,entity-framework,ef-code-first,C#,Entity Framework,Ef Code First,我有一门课: [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 U

我有一门课:

[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
}
我尝试为此表创建自关系(谁添加了项,谁修改了项)

当我的类如上所示,并且我尝试在Package Manager控制台上使用
Add Migration init
时,它返回错误:

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

在出现此错误后,我尝试使用fluent API,并在ModelCreating上使用方法
(在我的上下文中)编写了:

模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().HasOptional(e=>e.UserAddedBy).WithMany().HasForeignKey(m=>m.AddedBy);
modelBuilder.Entity().HasOptional(e=>e.UserModifiedBy).WithMany().HasForeignKey(m=>m.ModifiedBy);
}
然后再次尝试添加迁移初始化,但我再次看到错误消息:

在模型生成过程中检测到一个或多个验证错误:

abc.User_UserAddedBy::多重性与引用冲突 关系中角色“User\u UserAddedBy\u Target”中的约束 “User_UserAddedBy”。因为所有的属性都在从属 角色不可为空,主角色的多重性必须为“1”。 abc.User\u UserModifiedBy::多重性与引用冲突 关系中角色“User\u UserModifiedBy\u Target”中的约束 “用户_UserModifiedBy”。因为依赖关系中的所有属性 角色不可为空,主角色的多重性必须为“1”

我找到了要在虚拟属性之前将
必需的
添加到属性的信息,但没有帮助

因为从属角色中的所有属性都不可为null, 主体角色的多重性必须为“1”

尝试使用
int?
而不是
int

因为从属角色中的所有属性都不可为null, 主体角色的多重性必须为“1”


尝试使用
int?
而不是
int

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

  • 禁用强制执行外键(FK)
  • 添加一个虚拟用户,您可以使用“System”这样的名称,给它一个不可能的id,比如-1
  • 使系统成为它自己的UserAddedBy和UserModifiedBy
  • 启用强制FK。 现在,您可以添加系统为UserModifiedBy和UserAddedBy的用户

  • 这样,用户中唯一“被欺骗”的将是系统,在我看来,这是一个不错的折衷办法。

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

  • 禁用强制执行外键(FK)
  • 添加一个虚拟用户,您可以使用“System”这样的名称,给它一个不可能的id,比如-1
  • 使系统成为它自己的UserAddedBy和UserModifiedBy
  • 启用强制FK。 现在,您可以添加系统为UserModifiedBy和UserAddedBy的用户

  • 这样,用户中唯一“被欺骗”的将是系统,在我看来,这是一个不错的折衷办法。

    您尝试过可为空的整数吗?尝试此
    int?
    而不是
    int
    。DataAnnotations nullable
    int
    它们生成指示的第一个错误,但fluent API工作正常。但是我更喜欢DataAnnotations,我想象他正在监视连接的不可为null的
    ForeignKey
    。没有其他类,这是同一个表的两个个人关系。我注意到了,所以我删除了注释,看看我能做些什么。试试
    [ForeignKey(“UserAddedBy”)]public int怎么样?AddedBy{get;set;}公共虚拟用户UserAddedBy{get;set;}[ForeignKey(“UserModifiedBy”)]public int?ModifiedBy{get;set;}公共虚拟用户用户ModifiedBy{get;set;}
    是否尝试了可为null的整数?尝试此
    int?
    而不是
    int
    。DataAnnotations nullable
    int
    它们生成指示的第一个错误,但fluent API工作正常。但是我更喜欢DataAnnotations,我想象他正在监视连接的不可为null的
    ForeignKey
    。没有其他类,这是同一个表的两个个人关系。我注意到了,所以我删除了注释,看看我能做些什么。试试
    [ForeignKey(“UserAddedBy”)]public int怎么样?AddedBy{get;set;}公共虚拟用户UserAddedBy{get;set;}[ForeignKey(“UserModifiedBy”)]public int?ModifiedBy{get;set;}公共虚拟用户用户ModifiedBy{get;set;}
    我使用了您建议的解决方案,一切正常,但如果我只使用fluent API的话。我不知道为什么。我使用了你建议的解决方案,一切都正常,但如果我使用fluent API就好了。我不知道为什么。
        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);
        }