[英]C# Create employee. Save to SQL Database using EF
我正在將一名員工保存到SQL數據庫。 我要保存名字,姓氏,用戶名和密碼。 如何避免保存多個相同的用戶名?
我已經試過了:
private void CreateEmployee()
{
using (var db = new TidrapportDBEntities())
{
var user = (from p
in db.Login
where p.username != null
select p).ToList();
foreach (var vUser in user)
{
if (vUser.username == textBoxUsername.Text)
{
labelSuccessFail.Visible = true;
labelSuccessFail.Text = "Accountname already exist.";
break;
}
else
{
var userInfo = new Login();
var persInfo = new PersonalInformation();
persInfo.firstname = textBoxFirstname.Text;
persInfo.lastname = textBoxLastname.Text;
userInfo.username = textBoxUsername.Text;
userInfo.password = textBoxPassword.Text;
userInfo.employeeId = persInfo.employeeId;
db.Login.Add(userInfo);
db.PersonalInformation.Add(persInfo);
db.SaveChanges();
textBoxFirstname.Text = string.Empty;
textBoxLastname.Text = string.Empty;
textBoxUsername.Text = string.Empty;
textBoxPassword.Text = string.Empty;
labelSuccessFail.Visible = true;
labelSuccessFail.Text = "Successfully created account.";
}
}
}
}
有什么提示我可以嘗試嗎?
親切的問候,克里斯蒂安
您應該在用戶名字段上具有唯一約束。 不確定在EF中是先執行代碼,先進行建模還是先進行數據庫處理,但是您應該可以通過Google搜索如何使用正確的方法在數據庫中進行設置。 如果您嘗試保存一個,則會拋出異常,以確保您不能保存多個。
您還可以使用LINQ語句將用戶列表限制為要創建的用戶名,然后您只需要檢查布爾值以查看是否返回行即可。 這樣,您不必讀取整個數據庫表(“ toList”正在執行的操作)。
在您的代碼示例中,您將所有用戶都擁有一個用戶名,然后對其進行循環,但是只有當第一個匹配您要保存的用戶名時,條件代碼才真正起作用您將嘗試第二次重新創建副本。 因此,為了使代碼正常工作,您可以嘗試:
private void CreateEmployee()
{
using (var db = new TidrapportDBEntities())
{
var user = (from p
in db.Login
where p.username != null
select p).ToList();
bool found = false;
foreach (var vUser in user)
{
if (vUser.username == textBoxUsername.Text)
{
found = true;
labelSuccessFail.Visible = true;
labelSuccessFail.Text = "Accountname already exist.";
break;
}
}
if(!found)
{
var userInfo = new Login();
var persInfo = new PersonalInformation();
persInfo.firstname = textBoxFirstname.Text;
persInfo.lastname = textBoxLastname.Text;
userInfo.username = textBoxUsername.Text;
userInfo.password = textBoxPassword.Text;
userInfo.employeeId = persInfo.employeeId;
db.Login.Add(userInfo);
db.PersonalInformation.Add(persInfo);
db.SaveChanges();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.