MVC 6代码第一个对象在插入时忽略外键限制

时间:2016-03-25 15:00:42

标签: c# asp.net asp.net-mvc asp.net-web-api asp.net-core-mvc

我正在使用MVC 6和this page上的教程创建一个Web API项目。

我在Models文件夹和Level类中创建了一个User类。它们之间的关系是用户有一个级别,因此级别与许多用户相关(我猜是1到多个)。以下是每个班级的内容:

public class User
{
    [Key]
    public string username { get; set; }

    //More attributes

    [Required]
    public int levelNumber { get; set; }
    [ForeignKey("levelNumber")]
    public virtual Level level { get; set; }
}

public class Level
{
    [Key]
    public int levelNumber { get; set; }

    //More attributes

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

好的,在为每个类创建存储库和控制器之后,我使用Fiddler来发送一些请求并提供数据库。我使用此JSON创建一个ID为1的级别:{"levelNumber":"1", "name":"First Level", "icon":"myicon", "min_score":"0"}。它没有任何问题。

然后我想创建一个新用户,它应该引用ID为1的Level类,但显然它忽略了它。此外,如果我使用不存在的levelNumber创建新用户,则不应创建用户,因为外键不存在,但无论如何都会创建用户。我使用此JSON来创建用户引用级别1: {"username":"myuser", "fbID":"x", "firstname":"Name", "lastname":"Lastname", "gender":"male", "location":"GT", "levelNumber":"1"}。然后我创建一个引用级别2的新用户(不存在):{"username":"myuser2", "fbID":"x", "firstname":"Name", "lastname":"Lastname", "gender":"male", "location":"GT", "levelNumber":"2"}。这是我对级别和用户执行GET请求时得到的结果:

位: enter image description here

用户: enter image description here

我的模型或逻辑有什么问题?谢谢你的时间。

2 个答案:

答案 0 :(得分:1)

选择用户时应包括级别。

  Context.Users.Include(x=>x.Level)

答案 1 :(得分:0)

将[ForeignKey(“Level”)]数据注释放在User.levelNumber属性的顶部,并将其从公共虚拟级别级别{get;组; }

应该是:

[Required]
[ForeignKey("Level")]
public int levelNumber { get; set; }

public virtual Level level { get; set; }