Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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# 具有实体框架的MVC操作异常无效_C#_Asp.net Mvc_Entity Framework_Relational Database - Fatal编程技术网

C# 具有实体框架的MVC操作异常无效

C# 具有实体框架的MVC操作异常无效,c#,asp.net-mvc,entity-framework,relational-database,C#,Asp.net Mvc,Entity Framework,Relational Database,用户和管理员是1对1的关系,其中只有1个用户的1个管理员角色 以前,我通过在管理员类的第一行添加[Key]来修复ModelValidationException,该行位于此链接之后,但现在我遇到了以下错误: 无法确定服务器之间关联的主体端 类型“RecreationalServicesTicketingSystem.Models.Administrator”和 '娱乐服务SticketingSystem.Models.User'。主端 必须使用 关系流API或数据注释 我试图遵循这个解决方案,但

用户和管理员是1对1的关系,其中只有1个用户的1个管理员角色

以前,我通过在管理员类的第一行添加[Key]来修复ModelValidationException,该行位于此链接之后,但现在我遇到了以下错误:

无法确定服务器之间关联的主体端 类型“RecreationalServicesTicketingSystem.Models.Administrator”和 '娱乐服务SticketingSystem.Models.User'。主端 必须使用 关系流API或数据注释

我试图遵循这个解决方案,但它仍然给了我同样的错误

User.cs

public class User
    {
        public int UserID { get; set; }
        [StringLength(50, MinimumLength = 1)]
        public string LastName { get; set; }
        [StringLength(50, MinimumLength = 1, ErrorMessage = "First name cannot be longer than 50 characters.")]
        [Column("FirstName")]
        public string FirstMidName { get; set; }
        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
        public DateTime EnrollmentDate { get; set; }

        public int DepotID { get; set; }
        public int DepartmentID { get; set; }
        public int TicketID { get; set; }


        public string FullName
        {
            get { return LastName + ", " + FirstMidName; }
        }

        //Setting up relationships A use can apply for any number of tickets, so Tickets is defined as a collection of Ticket entities.
        public virtual ICollection<Ticket> Tickets { get; set; }

        //Setting up relationships Users can only have ONE adminstrator so we use public virtual Administrator Administrator { get; set; }
        public virtual Administrator Administrator { get; set; }
        public virtual Department Department { get; set; }

        public virtual Depot Depot { get; set; }
    }
公共类用户
{
public int UserID{get;set;}
[StringLength(50,最小长度=1)]
公共字符串LastName{get;set;}
[StringLength(50,MinimumLength=1,ErrorMessage=“名字不能超过50个字符)。]
[列(“名字”)]
公共字符串FirstMidName{get;set;}
[数据类型(DataType.Date)]
[DisplayFormat(DataFormatString=“{0:yyyy-MM-dd}”,ApplyFormatInEditMode=true)]
公共日期时间注册日期{get;set;}
public int DepotID{get;set;}
public int DepartmentID{get;set;}
public int TicketID{get;set;}
公共字符串全名
{
获取{return LastName+“,”+FirstMidName;}
}
//设置关系使用可以应用于任意数量的票据,因此票据被定义为票据实体的集合。
公共虚拟ICollection票证{get;set;}
//设置关系用户只能有一个管理员,因此我们使用公共虚拟管理员{get;set;}
公共虚拟管理员管理员{get;set;}
公共虚拟部门部门{get;set;}
公共虚拟仓库{get;set;}
}
Administrator.cs

public class Administrator
{
    [Key]
    public int AdminID { get; set; }
    public int TicketID { get; set; }   
    public int UserID { get; set; }
    [StringLength(50)]
    public string AdminRole { get; set; }
    public virtual ICollection<Ticket> Tickets { get; set; }
    public virtual User User { get; set; }
}
公共类管理员
{
[关键]
public int AdminID{get;set;}
public int TicketID{get;set;}
public int UserID{get;set;}
[长度(50)]
公共字符串AdminRole{get;set;}
公共虚拟ICollection票证{get;set;}
公共虚拟用户用户{get;set;}
}
在configuration.cs中,我为用户和管理员执行迁移

使用者

var用户=新列表
{
新用户{FirstMidName=“lala”,LastName=“la”,
EnrollmentDate=DateTime.Parse(“2016-02-18”)},
新用户{FirstMidName=“baba”,LastName=“baba”,
EnrollmentDate=DateTime.Parse(“2016-02-18”)},
新用户{FirstMidName=“dada”,LastName=“dada”,
EnrollmentDate=DateTime.Parse(“2016-02-18”)},
新用户{FirstMidName=“Christine”,LastName=“West”,
EnrollmentDate=DateTime.Parse(“2016-02-18”)},
};
管理员

    var administrator = new List<Administrator>
    {
        new Administrator {AdminID = 1, AdminRole = "Administrator LVL1", User = users.Single ( s => s.UserID == 1),
        Tickets = new List<Ticket>() },
        new Administrator {AdminID = 2, AdminRole = "Administrator LVL2", User = users.Single ( s => s.UserID == 2),
        Tickets = new List<Ticket>() },
        new Administrator {AdminID = 3, AdminRole = "Administrator LVL3", User = users.Single ( s => s.UserID == 3),
        Tickets = new List<Ticket>() }



    };
    administrator.ForEach(s => context.Administrators.AddOrUpdate(p => p.AdminID, s));
    context.SaveChanges();
}
var管理员=新列表
{
新管理员{AdminID=1,AdminRole=“Administrator LVL1”,User=users.Single(s=>s.UserID==1),
票证=新列表()},
新管理员{AdminID=2,AdminRole=“Administrator LVL2”,User=users.Single(s=>s.UserID==2),
票证=新列表()},
新管理员{AdminID=3,AdminRole=“Administrator LVL3”,User=users.Single(s=>s.UserID==3),
票证=新列表()}
};
administrator.ForEach(s=>context.Administrators.AddOrUpdate(p=>p.AdminID,s));
SaveChanges();
}

在一对一关系中,实体必须共享相同的主键。因此,删除
AdminId
,并将
UserId
作为主键。此外,您应该配置关系的主体端,即级联删除应该采取的方向。当用户被删除时,管理员也应该被删除,因此用户应该是负责人。看到了吗?我试着遵循这个解决方案,我不知道你是如何使用这个建议的映射的。@GertArnold我试过了,但删除了它,因为它没有解决我的问题problem@Dabblernl但我需要adminID,因为adminID标识用户是管理员LVL1还是管理员LVL2等?我把[Key,ForeignKey(“User”)]放在公共int-UserID{get;set;}@GertArnold上面,这没有任何意义。
    var administrator = new List<Administrator>
    {
        new Administrator {AdminID = 1, AdminRole = "Administrator LVL1", User = users.Single ( s => s.UserID == 1),
        Tickets = new List<Ticket>() },
        new Administrator {AdminID = 2, AdminRole = "Administrator LVL2", User = users.Single ( s => s.UserID == 2),
        Tickets = new List<Ticket>() },
        new Administrator {AdminID = 3, AdminRole = "Administrator LVL3", User = users.Single ( s => s.UserID == 3),
        Tickets = new List<Ticket>() }



    };
    administrator.ForEach(s => context.Administrators.AddOrUpdate(p => p.AdminID, s));
    context.SaveChanges();
}