Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.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# 实体框架代码首先将外键与主键设置在同一个表中_C#_Asp.net_Entity Framework 6 - Fatal编程技术网

C# 实体框架代码首先将外键与主键设置在同一个表中

C# 实体框架代码首先将外键与主键设置在同一个表中,c#,asp.net,entity-framework-6,C#,Asp.net,Entity Framework 6,我从SysModelBase继承了这个WdUser类: [Serializable] public class WdUser : SysDomainModelBase, IWdUser { [Display(Name = "UserName")] [MaxLength(25)] [Required] public string UserName { get; set; } [Required] [Index(IsUnique = true)]

我从SysModelBase继承了这个
WdUser
类:

[Serializable]
public class WdUser : SysDomainModelBase, IWdUser
{
    [Display(Name = "UserName")]
    [MaxLength(25)]
    [Required]
    public string UserName { get; set; }

    [Required]
    [Index(IsUnique = true)]
    [MaxLength(25)]
    [Display(Name = "LoginName ")]
    public string LoginName { get; set; }

    [Display(Name = "Password ")]
    [MaxLength(50)]
    [Required]
    [DataType(DataType.Password)]
    public string Password { get; set; }

    [Display(Name = "Email 地址")]
    [DataType(DataType.EmailAddress)]
    [MaxLength(50)]
    public string Email { get; set; }

    [Display(Name = "Telephone ")]
    [DataType(DataType.PhoneNumber)]
    [MaxLength(15)]
    public string Telephone { get; set; }

    [Display(Name = "LastLoginDateTime ")]
    [DataType(DataType.DateTime)]
    public DateTime LastLoginDateTime { get; set; }

    [Required]
    [Display(Name = "UserStatus ")]
    public UserStatus Status { get; set; }

    [Display(Name = "Roles ")]
    public List<WdRole> Roles { get; set; }

    public bool IsInRole(string role) => Roles.Any(item => item.RoleName == role);

    [NotMapped]
    public IIdentity Identity { get; set; }
}
运行此代码时,我得到一个错误:

无法确定类型“SHWDTech.Platform.Model.Model.WdUser”和“SHWDTech.Platform.Model.Model.WdUser”之间关联的主端。必须使用关系fluent API或数据注释显式配置此关联的主体端

如何设置与
WdUser
class的关系

我不知道的是如何将同一个表中的主键设置为外键的其他字段。

例如

public class WdUser : SysDomainModelBase, IWdUser
{
//This is your primary key of WDUser
public int UserID{get;set;}
//This is for your foreign key mapping
public virtual WDUser WDUser{get;set;}
public virtual  ICollection<WDUser> WDUserList{get;set;}
}
公共类WdUser:SysDomainModelBase,IWdUser
{
//这是WDUser的主键
public int UserID{get;set;}
//这是用于外键映射的
公共虚拟WDUser WDUser{get;set;}
公共虚拟ICollection WDUserList{get;set;}
}

以上就是您所需的两个外键的答案

public class WdUser : SysDomainModelBase, IWdUser
{
//This is your primary key of WDUser
public int UserID{get;set;}
//This is for your 1st foreign key mapping
public virtual WDUser WDUser{get;set;}
public virtual  ICollection<WDUser> WDUserList{get;set;}
public int fk1{get;set;}
//This is for your 2nd foreign key mapping
public virtual  ICollection<WDUser> WDUserList1{get;set;}
public int fk2{get;set;}
}
公共类WdUser:SysDomainModelBase,IWdUser
{
//这是WDUser的主键
public int UserID{get;set;}
//这是您的第一个外键映射
公共虚拟WDUser WDUser{get;set;}
公共虚拟ICollection WDUserList{get;set;}
公共int fk1{get;set;}
//这是第二个外键映射
公共虚拟ICollection WDUserList1{get;set;}
公共int fk2{get;set;}
}
您的fluent api将

//mapping for 1st foreign key
     dbModelBuilder.Entity<WDUser>()
                        .HasKey(wdUser=> wdUser.Id)
                        .HasRequired<Tasks>(wdUser => wdUser.WDUser)
                        .WithMany(s => s.WDUserList)
                        .HasForeignKey(s => .fk1).WillCascadeOnDelete(false); 



    //mapping for 2st foreign key
 dbModelBuilder.Entity<WDUser>()
                    .HasKey(wdUser=> wdUser.Id)
                    .HasRequired<Tasks>(wdUser => wdUser.WDUser)
                    .WithMany(s => s.WDUserList1)
                    .HasForeignKey(s => .fk2).WillCascadeOnDelete(false); 
//第一个外键的映射
dbModelBuilder.Entity()
.HasKey(wdUser=>wdUser.Id)
.HasRequired(wdUser=>wdUser.wdUser)
.WithMany(s=>s.WDUserList)
.HasForeignKey(s=>.fk1).WillCascadeOnDelete(false);
//2st外键的映射
dbModelBuilder.Entity()
.HasKey(wdUser=>wdUser.Id)
.HasRequired(wdUser=>wdUser.wdUser)
.WithMany(s=>s.WDUserList1)
.HasForeignKey(s=>.fk2).WillCascadeOnDelete(false);

可能是重复的谢谢,但我有两个WdUser属性,我应该有两个WdUserList属性吗?我没有得到你的消息。如果你想要两个外键,最好使用fluent api。是的,我只想要两个外键用于同一个表,而且非常有用。
//mapping for 1st foreign key
     dbModelBuilder.Entity<WDUser>()
                        .HasKey(wdUser=> wdUser.Id)
                        .HasRequired<Tasks>(wdUser => wdUser.WDUser)
                        .WithMany(s => s.WDUserList)
                        .HasForeignKey(s => .fk1).WillCascadeOnDelete(false); 



    //mapping for 2st foreign key
 dbModelBuilder.Entity<WDUser>()
                    .HasKey(wdUser=> wdUser.Id)
                    .HasRequired<Tasks>(wdUser => wdUser.WDUser)
                    .WithMany(s => s.WDUserList1)
                    .HasForeignKey(s => .fk2).WillCascadeOnDelete(false);