2015-05-07 47 views
1

我是MVC的新手,请耐心等待。MVC设置模型ID值

作为一个学习项目,我决定创建一个梦幻足球网站。 NFL有一个非常酷的api,可以让你下载统计数据和其他信息。作为数据流的一部分,每个玩家都有一个ID号码(实际上他们有3个ID,但我只是使用主号码)。

这里是问题:我想设置我的模型使用playerId值(从NFL API中的AJAX调用传入)作为我的Player类中的PK和其他几个类/表上的FK。但是,您通常不能在数据库上分配PK Identity值。我做了很多搜索解决方法,并尝试了几个技巧,但都没有奏效。我尝试手动使用数据库,结果破坏了项目,不得不重新开始。我曾想过让playerId成为代理键,但似乎不必要的复杂。从理论上讲,我会周期性地调用api进行更新,并且这些都与该playerId值相关联,因此使得playerId为PK是最有意义的。

有没有办法做到这一点?

+0

你的PK和NFL PK不需要匹配,而且他们不应该,因为它们不是同一个数据源。如果你是恢复那里数据库它将是有道理的,作为一个PK。你可以将NFL PK保存为一个Int和索引,它将是唯一的,而不是PK。 – juanvan

+0

听起来像你不想让PK成为“身份”专栏,对吧?为什么? – Jonesopolis

+0

你在使用实体框架吗? – DWright

回答

0

我终于得到了这个工作。

首先,添加注释到PK(playerId在我的情况。

[DatabaseGenerated(DatabaseGeneratedOption.None)] 

其次,当你做,你必须证明迁移读取它。我遇到了不少错误,因为迁移代码在一个例子中,我改变了PK列的名字,并且代码在删除旧列之前试图添加新的PK列,我只需要重新排列这些步骤就可以了。关闭将要成为PK的列中的“身份:真实”

*注意:我的迁移工具问题可能部分是由于我使用的是我还没有更新一段时间的VS2012。从那时起,一些扭结可能已经被制定出来了。

0

关闭数据库中主键列上的自动增量。如果您使用SQL Server,则不要设置标识列。设置您的模型,如下所示:

public class Table_1 
{ 
    [Key] 
    [DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.None)] 
    public int playerId {get; set;} 
    public string player_name { get; set; } 
} 

然后在创建记录时设置playerId。

+0

嗯,你是对的,但我必须做的不仅仅是这一点(尽管这是解决方案的一部分)。基本上,迁移生成的代码是可怕的。但是,如果您重新排列迁移代码中的行并删除不需要的地方的“标识:真”,那么您可以使其工作。 – nurdyguy

+0

@nurdyguy你在帖子中没有提出明确的问题。因此,我提供了一个我认为可能有所帮助的解决方案。 –

+0

你的解决方案确实有帮助,如果可以的话我会给你+1(我的排名太低)。在发布之前,我发现了一些完整的解决方案,但没有机会坐下来解释它。 – nurdyguy

0

你将不得不关闭标识规范上的SQL Server端:enter image description here