2015-11-29 204 views
1

我试图使用实体框架的记录添加到表中,我得到DbUpdateException当我_entities.SaveChanges();执行此方法:实体框架 - 当添加DbUpdateException实体

public Player CreatePlayer(int fideNumber, string name, string surname, DateTime birthDate, double? rating = null) 
{ 
    var player = _entities.Players.Add(new Player 
    { 
     Id = fideNumber, 
     BirthDate = new DateTime(birthDate.Year, birthDate.Month, birthDate.Day), 
     Name = name, 
     Surname = surname, 
     Rating = 1500 
    }); 

    _entities.SaveChanges(); 
    return player; 
} 

Player模式是这样的:

public partial class Player 
{ 
    public Player() 
    { 
     this.Tournaments = new HashSet<Tournament>(); 
     this.GamesAsWhite = new HashSet<Game>(); 
     this.GamesAsBlack = new HashSet<Game>(); 
    } 

    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Surname { get; set; } 
    public System.DateTime BirthDate { get; set; } 
    public Nullable<double> Rating { get; set; } 

    public virtual ICollection<Tournament> Tournaments { get; set; } 
    public virtual ICollection<Game> GamesAsWhite { get; set; } 
    public virtual ICollection<Game> GamesAsBlack { get; set; } 
} 

我已经通过设计师创建了模型,然后生成了我的数据库。以这种方式创建锦标赛的效果很好,但由于某些原因,玩家创建会引发错误。字段Id的类型是Computed

+0

由于您的'Id'字段是计算出来的(可能是Identity),您不应该为其分配值。 –

+0

出于某种原因,当我将我的字段设置为Identity时,值将自动生成,但是当我将字段设置为Identity时,值将是必需的... –

+0

好吧,将Id字段StoreGeneratedPattern设置为none无法解决问题。 –

回答

1

由于您的Id字段为Identity,因此您不应为其指定值。 SQL Server将为其分配一个新的Identity值。

删除线Id = fideNumber

此外,如果你需要自己设置的Id的价值,你不应该对列使用Identity,你应该设置StoreGeneratedPatternnone