【问题标题】:MVC 6 code first object ignores foreign key restriction when insertedMVC 6 代码第一个对象在插入时忽略外键限制
【发布时间】:2016-03-25 15:00:42
【问题描述】:

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

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

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 请求时得到的结果:

级别:

用户:

我的模型或逻辑有什么问题?感谢您的宝贵时间。

【问题讨论】:

  • 你检查过数据库吗?用户表中的列上是否存在外键引用?你确定你没有捕捉和吞下异常吗?
  • 如何查看数据库?每当我在 localhost 上运行我的项目时,所有以前的数据都会被删除。此外,当我发布到 Azure 时,所有以前的数据都会被删除。
  • 当你创建一个不存在的级别 2 的用户时,它是否也会创建一个键为 2 的新级别对象?
  • 你可以运行一次,然后去数据库检查,但是检查架构属性不需要数据。
  • 请查看我的更新答案

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


【解决方案1】:

您应该在选择用户时包含级别。

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

【讨论】:

  • 我应该在哪里使用这个?我不明白该放在哪里。
  • 如何选择用户?
  • 我使用 ConcurrentDictionary 并使用 return _users.Values 返回所有数据;
【解决方案2】:

将 [ForeignKey("Level")] 数据注释放在 User.levelNumber 属性之上,并将其从 public virtual Level level { get;放; }

应该是:

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

public virtual Level level { get; set; }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-23
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    • 2014-12-07
    • 1970-01-01
    相关资源
    最近更新 更多