ForeignKey首先使用ASP.NET MVC 4迁移代码

时间:2014-04-14 14:26:26

标签: c# asp.net-mvc asp.net-mvc-4 ef-code-first foreign-keys

如何在计算机类ID的下面User类中创建外键?

用户表:

[Table("User")]
class User{
 [Key]
 public int idUser;
 public int idComputer; //ForeignKey
}

电脑桌:

[Table("Computer")]
class Computer{
 [Key]
 public int idComputer;
}

如何在这些课程之间建立一对多的关系和一对一的关系呢?

2 个答案:

答案 0 :(得分:4)

要进行设置以便用户拥有多台计算机而计算机只有一位用户,您可以这样做:

class User {
    public int idUser {get;set;}

    public virtual ICollection<Computer> Computers {get;set;}
}

class Computer {
    public int idComputer {get;set;}

    public int UserID {get;set;} // automatically detected as a ForeignKey since the format it [classname]ID
    public virtual User User {get;set;}
}

要进行设置以便计算机拥有多个用户且用户拥有一台计算机,您可以执行以下操作:

class User {
    public int idUser {get;set;}

    public int ComputerID {get;set;}
    public virtual Computer Computer {get;set;}
}

class Computer {
    public int idComputer {get;set;}

    public virtual ICollection<User> Users {get;set;}
}

进行设置,以便用户拥有一台计算机:

class User {
    public int ID {get;set;}

    public virtual Computer Computer {get;set;}
}

class Computer {
    public int ID {get;set;}

    [Required]
    public int UserID {get;set;}
    public virtual User User {get;set;}
}

[Required]标记应消除有关一对一关系的任何错误

作为旁注,EF Code First的重点是使事情变得简单快捷,但是当你不使用它提供的某些功能时,它会大大减少它,你必须做的事情更多的手工工作,这可能会导致错误。

Here's a tutorial on how to do code-first. I recommend you read up on it.

好的,我重读了原来的问题。你不能在同一个两个类之间同时拥有(一对一和一对多),你可以拥有一对一(即,一个用户有一台计算机,一台计算机有一个用户)或一对多(即,用户有许多计算机,计算机有一个用户,或者计算机有很多用户,用户有一台计算机。)它是一个或另一个,而不是两个, 之类的事情。您认为这是可能的这一事实强化了我确实需要阅读该教程或阅读简单关系数据库结构的声明

答案 1 :(得分:0)

这是一对一的关系:

[Table("User")]
class User{
 [Key]
 public int idUser {get;set;}
 public virtual Computer Computer {get;set;}
}


[Table("Computer")]
class Computer{
 [Key]
 public int idComputer {get;set;}
 [ForeignKey("idUser")]
 public virtual User user {get;set;}
}

对于一对多,这里的关系是一个用户有多台计算机:

[Table("User")]
    class User{
     [Key]
     public int idUser {get;set;}
     public ICollection<Computer> Computers {get;set;}
    }

[Table("Computer")]
    class Computer{
     [Key]
     public int idComputer {get;set;}
     [ForeignKey("idUser")]
     public virtual User user {get;set;}
    }

示例:

using(var db = new yourDbContext())
{

User user = new User();

user.Name = "Name";

db.User.Add(user);

db.SaveChanges();

Computer computer = new Computer();

// set properties here if any

Computer.CopmuterName ="Dell";

Computer.user = user;

db.Computer.Add(Computer);

db.SaveChanges();
}