gpt4 book ai didi

c# - EF SaveChanges 不保存也不抛出异常

转载 作者:搜寻专家 更新时间:2023-10-30 22:28:12 25 4
gpt4 key购买 nike

我有一个创建新用户的方法,然后在用户权限表中插入一行,但没有任何反应。这是我的代码:

// before: creates user

var permission = new UserPermission()
{
UserId = user.Id,
UserName = user.UserName,
Assets = createUserModel.Assets
};

AccountDb.UserPermissions.Add(permission);
var saveChangesResult = AccountDb.SaveChanges();

if (saveChangesResult == 0) // the result is always 0
{
AppUserManager.Delete(user);
return BadRequest("User permission could not be saved");
}

// then: add user to role and return ok

SaveChanges 总是返回 0 并且不更新数据库,我已经用谷歌搜索并尝试了以下操作:

// no success
AccountDb.UserPermissions.Attach(permission);

// no success either
AccountDb.Entry(permission).State = EntityState.Added;

我也尝试过使用异步方法,但没有成功。这是我的“UserPermission”模型:

public class UserPermission
{
public int Id { get; set; }

public string UserId { get; set; }

public string UserName { get; set; }

public string _Assets { get; set; }

[NotMapped]
public List<int> Assets
{
get
{
if (_Assets == null) return null;
return Array.ConvertAll(_Assets.Split(';'), Int32.Parse).ToList();
}
set
{
_Assets = String.Join(";", value.Select(x => x.ToString()).ToArray());
}
}
}

这很好奇,因为这个方法最近一直在工作,但是在“AccountContext”和一些 rolebacks 发生一些变化之后,我注意到这个方法不再工作了。

-- 编辑--

这里是完整的创建方法

[HttpPost]
[Route("create")]
public IHttpActionResult CreateUser(CreateUserBindingModel createUserModel)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}

if (createUserModel.RoleName is null)
{
return BadRequest("There is no role assigned to user");
}

var user = new UserModel()
{
UserName = createUserModel.UserName,
Email = createUserModel.Email,
FirstName = createUserModel.FirstName,
LastName = createUserModel.LastName
};

var addUserResult = AppUserManager.Create(user, createUserModel.Password);

if (!addUserResult.Succeeded)
{
return GetErrorResult(addUserResult);
}

var permission = new UserPermission()
{
UserId = user.Id,
UserName = user.UserName,
Assets = createUserModel.Assets
};

AccountDb.UserPermissions.Add(permission);
var saveChangesResult = AccountDb.SaveChanges();

if (saveChangesResult == 0)
{
AppUserManager.Delete(user);
return BadRequest("User permission could not be saved");
}

var addRoleResult = AppUserManager.AddToRole(user.Id, createUserModel.RoleName);

if (!addRoleResult.Succeeded)
{
AppUserManager.Delete(user);
return GetErrorResult(addUserResult);
}

return Ok(TheModelFactory.Create(user));
}

-- 编辑 2 --

我使用的是 Azure 数据库字符串,我更改为本地数据库字符串,但问题仍然存在,UserPermissions 表未更新且未发出任何错误。

最佳答案

您正在创建一个新用户,但您从未使用过结果。您的 user.Id 始终为 null(或相应的默认值)。

我不知道为什么你的数据库会悄无声息地失败(约束或外键应该抛出异常),但你应该先解决这个问题。这可能会导致写入真实记录。

关于c# - EF SaveChanges 不保存也不抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48343197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com