【发布时间】:2015-11-10 16:43:37
【问题描述】:
我正在尝试在同一屏幕上保存和编辑记录,但我认为我的逻辑有点混乱,这是他们使用实体框架执行此操作的更好方法,我记得遇到过一次或两次分离的方法。
protected void btnSave_Click(object sender, EventArgs e)
{
player _player = new player();
Guid id = new Guid(Request.QueryString["id"].ToString());
Guid teamId = new Guid(Request.QueryString["teamId"].ToString());
if (teamId != Guid.Empty)
_player.teamId = teamId;
if (id == Guid.Empty)
{
_player.Name = txtFullName.Text;
_player.address = txtAddress.Text;
_player.player_id = _dal.GetNextPlayerId(16, 45);
_player.gender = dlGenders.SelectedValue.ToString();
_dal.SoccerEntities.AddToplayers(_player);
_dal.SoccerEntities.SaveChanges();
Response.Redirect("default.aspx");
}
else
{
Guid _playerId = new Guid(Request.QueryString["id"].ToString());
_player = _dal.GetPlayerBYID(_playerId);
if (_player.player_id == "")
_player.player_id = _dal.GetNextPlayerId(16, 45);
_player.gender = dlGenders.SelectedValue.ToString();
_player.Name = txtFullName.Text;
_player.address = txtAddress.Text;
_player.player_id = _dal.GetNextPlayerId(16, 45);
_player.gender = dlGenders.SelectedValue.ToString();
if (teamId != Guid.Empty)
_player.teamId = teamId;
_dal.SoccerEntities.SaveChanges();
Response.Redirect("default.aspx");
}
如果玩家已经编辑他们的记录而不是添加新记录,那么他们可能存在也可能不存在?
我在 addtoplayers 上也遇到了错误
{"违反 PRIMARY KEY 约束 'PK_player'。无法在对象 'dbo.player' 中插入重复键。重复键值为 (00000000-0000-0000-0000-000000000000)。\r\n语句已终止。”}
【问题讨论】:
-
当您单步执行代码时,
id的值是多少。Empty.Guid默认情况下是这个{00000000-0000-0000-0000-000000000000},您能否说明这些值是什么,以便我们为您提供帮助@ 987654325@你的逻辑陈述。错误消息还告诉您确切的问题是什么。您在主键字段中已经有一个带有{00000000-0000-0000-0000-000000000000}的值,并且在创建Primary Key时不允许重复 -
您也应该将
SaveChanges调用包裹在try{}catch{}周围,并对Response.Redirect("default.aspx"); 进行一次调用。有几种方法可以重构这段代码,避免多次调用同一个方法 -
标签: c# entity-framework