我试图在同一屏幕上保存和编辑记录,但我认为我的逻辑有点搞砸是他们使用实体框架来做这件事的一种更好的方法,我remebmer遇到了一次或两次侦听的方法。更有效的方式处理编辑和实体保存?
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");
}
的secnerio是一个球员可能会或可能不会,如果他们已经自己编辑自己的记录,而不是添加一个新的存在?
我也混得addtoplayers错误
{“PRIMARY KEY约束 'PK_player'。违反无法插入对象 'dbo.player' 重复键,重复的键值是(00000000-0000 -0000-0000-000000000000)。\ r \ n声明已被终止。“}
是什么id'的'的价值,当你通过代码..也'默认Empty.Guid'步骤是这样的'{} 00000000-0000-0000-0000-000000000000'可以请你展示一下这些值是我们可以帮助你重构你的逻辑陈述。错误信息也告诉你问题是什么......你已经在主键字段中使用了“{00000000-0000-0000-0000-000000000000}”的值,并且在创建“主键”时不允许重复 – MethodMan
也应该围绕'try {} catch {}包装'SaveChanges'调用并对Response.Redirect(“default.aspx”)进行一次调用;有几种方法可以重构此代码,以便不会有多次调用相同的方法 – MethodMan
@MethodMan可以提供一个我在这里可以使用的类似\t \t if(EntityState == EntityState.Detached)来检测它的重构示例新的记录或现有的记录 – rogue39nin