我正在使用C#和Entity Framework 6创建应用程序。由于某种原因,数据未保存到数据库中。
我已经尝试过尝试在stackoverflow和其他论坛上针对类似问题提出的建议:
-将输入状态更改为已修改。
-将“复制到输出目录”属性设置为“如果更新则复制”。
-将代码放置在其他项目中,使缩小范围变得更加简单
解决问题。
-与过去的项目相比,这次我做了些不同的事情。
这些都没有帮助,所以我在这里被搞砸了:D
用于创建数据库的SQL(在我无法使用的功能中创建正在使用的表时,数据库的一部分)
CREATE TABLE [dbo].[User]
(
ID int IDENTITY(1,1) PRIMARY KEY,
Username varchar(64),
Name varchar(64),
Password binary(255),
PasswordSalt binary(255),
Validity int,
IdentificationServer int,
AuditDate datetime,
AuditUser int
);
CREATE TABLE [dbo].[Server]
(
ID int IDENTITY(1,1) PRIMARY KEY,
Name varchar(255),
Type int,
Validity int,
AuditDate datetime,
AuditUser int
);
ALTER TABLE [dbo].[User] ADD FOREIGN KEY (AuditUser) REFERENCES [dbo].[User] (ID);
ALTER TABLE [dbo].[Server] ADD FOREIGN KEY (AuditUser) REFERENCES [dbo].[User] (ID);
ALTER TABLE [dbo].[User] ADD FOREIGN KEY (IdentificationServer) REFERENCES [dbo].[Server] (ID);
尝试将新用户添加到数据库:
private void button_login_Click(object sender, EventArgs e)
{
int id = -1;
if(m_DBManager.AttemptLogin(textBox_username.Text, textBox_password.Text, out id))
{
MessageBox.Show("Login successful! UserID: " + id);
}
}
AttemptLogin:
public bool AttemptLogin(string username, string password, out int userID)
{
userID = -1;
List<User> users = GetUsers();
foreach (User user in m_DBEntities.User)
{
if (username == user.Username && PasswordEncription.VerifyPassword(password, user.PasswordSalt, user.Password))
{
userID = user.ID;
return true;
}
}
// Just to add a default user if the database is empty - this is what's not working.
// I will delete this afterwards, but here is when I realized that my data is not saved.
if (m_DBEntities.User.Count() == 0)
{
Console.WriteLine("Empty");
byte[] passwordSalt = PasswordEncription.GenerateSalt();
byte[] passwordHashed = PasswordEncription.ComputeHash(password, passwordSalt);
AddUser("Maul Ádám", username, passwordHashed, passwordSalt, (int)ValidityStates.ENABLED, -1, -1);
}
return false;
}
AddUser:
public void AddUser(string name, string username, byte[] password, byte[] passwordSalt, int validity, int identificationServer, int userID)
{
User user = new User();
user.Name = name;
user.Username = username;
user.Password = password;
user.PasswordSalt = passwordSalt;
user.Validity = validity;
if (identificationServer != -1)
{
user.IdentificationServer = identificationServer;
}
if(userID != -1)
{
user.AuditUser = userID;
}
user.AuditDate = DateTime.Now;
m_DBEntities.User.Add(user);
m_DBEntities.SaveChanges();
//Log((int)LogTypes.Add, "User added - ID: " + user.ID, userID);
}
编辑:
实体对象
服务器:
public partial class Server
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Server()
{
this.User1 = new HashSet<User>();
}
public int ID { get; set; }
public string Name { get; set; }
public Nullable<int> Type { get; set; }
public Nullable<int> Validity { get; set; }
public Nullable<System.DateTime> AuditDate { get; set; }
public Nullable<int> AuditUser { get; set; }
public virtual User User { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<User> User1 { get; set; }
}
用户:
public partial class User
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public User()
{
this.Log = new HashSet<Log>();
this.Module = new HashSet<Module>();
this.Parameter = new HashSet<Parameter>();
this.Server = new HashSet<Server>();
this.UIElement_Property = new HashSet<UIElement_Property>();
this.User1 = new HashSet<User>();
this.User_group_pair = new HashSet<User_group_pair>();
this.Usergroup = new HashSet<Usergroup>();
}
public int ID { get; set; }
public string Username { get; set; }
public string Name { get; set; }
public byte[] Password { get; set; }
public byte[] PasswordSalt { get; set; }
public Nullable<int> Validity { get; set; }
public Nullable<int> IdentificationServer { get; set; }
public Nullable<System.DateTime> AuditDate { get; set; }
public Nullable<int> AuditUser { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Log> Log { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Module> Module { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Parameter> Parameter { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Server> Server { get; set; }
public virtual Server Server1 { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<UIElement_Property> UIElement_Property { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<User> User1 { get; set; }
public virtual User User2 { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<User_group_pair> User_group_pair { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Usergroup> Usergroup { get; set; }
}
编辑:DBManager类
namespace Controller.DBManagement
{
public partial class DBManager
{
private FrameworkDBEntities m_DBEntities;
public DBManager()
{
m_DBEntities = new FrameworkDBEntities();
}
}
}
namespace Controller.DBManagement
{
public partial class DBManager
{
public List<Module> GetModulesWithGroup(int groupID)
{
return (from gmp in m_DBEntities.Group_module_pair
where gmp.UsergroupID == groupID
select gmp.Module).ToList();
}
public List<Usergroup> GetGroupsWithModule(int moduleID)
{
return (from gmp in m_DBEntities.Group_module_pair
where gmp.ModuleID == moduleID
select gmp.Usergroup).ToList();
}
public List<Group_module_pair> GetModulePairsWithGroup(int groupID)
{
return (from gmp in m_DBEntities.Group_module_pair
where gmp.UsergroupID == groupID
select gmp).ToList();
}
public List<Group_module_pair> GetModulePairsWithModule(int moduleID)
{
return (from gmp in m_DBEntities.Group_module_pair
where gmp.ModuleID == moduleID
select gmp).ToList();
}
}
}
namespace Controller.DBManagement
{
public partial class DBManager
{
public List<Log> GetLogs(int logType)
{
return (from l in m_DBEntities.Log
where l.Type == logType
select l).ToList();
}
public List<Log> GetLogs(int logType, DateTime dateFrom, DateTime dateTo)
{
return (from l in m_DBEntities.Log
where
l.Type == logType &&
l.AuditDate >= dateFrom &&
l.AuditDate <= dateTo
select l).ToList();
}
public void Log(int logType, string message, int userID)
{
Log newLog = new Log();
newLog.Type = logType;
newLog.Message = message;
newLog.AuditUser = userID;
newLog.AuditDate = DateTime.Now;
m_DBEntities.Log.Add(newLog);
m_DBEntities.SaveChanges();
}
public bool RemoveLog(int id)
{
Log log = m_DBEntities.Log.SingleOrDefault(l => l.ID == id);
if (log == null) return false;
m_DBEntities.Log.Remove(log);
m_DBEntities.SaveChanges();
return true;
}
public void ClearLog()
{
var query = from l in m_DBEntities.Log
select l;
foreach(var l in query)
{
m_DBEntities.Log.Remove(l);
}
m_DBEntities.SaveChanges();
}
}
}
namespace Controller.DBManagement
{
public partial class DBManager
{
public bool GetModule(int id, out Module module)
{
module = m_DBEntities.Module.SingleOrDefault(m => m.ID == id);
return module == null ? false : true;
}
public void AddModule(string name, int validity, int userID)
{
Module module = new Module();
module.Name = name;
module.Validity = validity;
module.AuditUser = userID;
module.AuditDate = DateTime.Now;
m_DBEntities.Module.Add(module);
m_DBEntities.SaveChanges();
Log((int)LogTypes.Add, "Modul hozzáadva - ID: " + module.ID, userID);
}
public bool ModifyModule(int id, string name, int validity, int userID)
{
Module module = m_DBEntities.Module.SingleOrDefault(m => m.ID == id);
if (module == null) return false;
module.Name = name;
module.Validity = validity;
module.AuditUser = userID;
module.AuditDate = DateTime.Now;
m_DBEntities.SaveChanges();
Log((int)LogTypes.Modify, "Modul szerkesztve - ID: " + module.ID, userID);
return true;
}
public bool RemoveModule(int id, int userID)
{
Module module = m_DBEntities.Module.SingleOrDefault(m => m.ID == id);
if (module == null) return false;
List<Group_module_pair> pairsWithModule = GetModulePairsWithModule(module.ID);
foreach(Group_module_pair gmp in pairsWithModule)
{
m_DBEntities.Group_module_pair.Remove(gmp);
}
Log((int)LogTypes.Remove, "Modul törölve - ID: " + module.ID, userID);
m_DBEntities.Module.Remove(module);
m_DBEntities.SaveChanges();
return true;
}
}
}
namespace Controller.DBManagement
{
public partial class DBManager
{
public bool GetParameter(int id, out Parameter systemconfig)
{
systemconfig = m_DBEntities.Parameter.SingleOrDefault(p => p.ID == id);
return systemconfig == null ? false : true;
}
public void AddParameter(string name, string value, int userID)
{
Parameter systemconfig = new Parameter();
systemconfig.Name = name;
systemconfig.Value = value;
systemconfig.AuditUser = userID;
systemconfig.AuditDate = DateTime.Now;
m_DBEntities.Parameter.Add(systemconfig);
m_DBEntities.SaveChanges();
Log((int)LogTypes.Add, "Paraméter hozzáadva - ID: " + systemconfig.ID, userID);
}
public bool ModifyParameter(int id, string name, string value, int userID)
{
Parameter parameter = m_DBEntities.Parameter.SingleOrDefault(p => p.ID == id);
if (parameter == null) return false;
parameter.Name = name;
parameter.Value = value;
parameter.AuditUser = userID;
parameter.AuditDate = DateTime.Now;
m_DBEntities.SaveChanges();
Log((int)LogTypes.Modify, "Paraméter módosítva - ID: " + parameter.ID, userID);
return true;
}
public bool RemoveParameter(int id, int userID)
{
Parameter parameter = m_DBEntities.Parameter.SingleOrDefault(p => p.ID == id);
if (parameter == null) return false;
Log((int)LogTypes.Remove, "Paraméter törölve - ID: " + parameter.ID, userID);
m_DBEntities.Parameter.Remove(parameter);
m_DBEntities.SaveChanges();
return true;
}
}
}
namespace Controller.DBManagement
{
public partial class DBManager
{
public bool GetServer(int id, out Server server)
{
server = m_DBEntities.Server.SingleOrDefault(s => s.ID == id);
return server == null ? false : true;
}
public void AddServer(string name, int type, int validity, int userID)
{
Server server = new Server();
server.Name = name;
server.Type = type;
server.Validity = validity;
server.AuditUser = userID;
server.AuditDate = DateTime.Now;
m_DBEntities.Server.Add(server);
m_DBEntities.SaveChanges();
Log((int)LogTypes.Add, "Szerver hozzáadva - ID: " + server.ID, userID);
}
public bool ModifyServer(int id, string name, int type, int validity, int userID)
{
Server server = m_DBEntities.Server.SingleOrDefault(s => s.ID == id);
if (server == null) return false;
server.Name = name;
server.Type = type;
server.Validity = validity;
server.AuditUser = userID;
server.AuditDate = DateTime.Now;
m_DBEntities.SaveChanges();
Log((int)LogTypes.Modify, "Szerver módosítva - ID: " + server.ID, userID);
return true;
}
public bool RemoveServer(int id, int userID)
{
Server server = m_DBEntities.Server.SingleOrDefault(s => s.ID == id);
if (server == null) return false;
Log((int)LogTypes.Remove, "Szerver törölve - ID: " + server.ID, userID);
m_DBEntities.Server.Remove(server);
m_DBEntities.SaveChanges();
return true;
}
}
}
namespace Controller.DBManagement
{
public partial class DBManager
{
public bool GetUser(int id, out User user)
{
user = m_DBEntities.User.SingleOrDefault(u => u.ID == id);
return user == null ? false : true;
}
public List<User> GetUsers()
{
return (from u in m_DBEntities.User select u).ToList();
}
public void AddUser(string name, string username, byte[] password, byte[] passwordSalt, int validity, int identificationServer, int userID)
{
User user = new User();
user.Name = name;
user.Username = username;
user.Password = password;
user.PasswordSalt = passwordSalt;
user.Validity = validity;
if (identificationServer != -1)
{
user.IdentificationServer = identificationServer;
}
if(userID != -1)
{
user.AuditUser = userID;
}
user.AuditDate = DateTime.Now;
m_DBEntities.User.Add(user);
m_DBEntities.SaveChanges();
//Log((int)LogTypes.Add, "User added - ID: " + user.ID, userID);
}
public bool ModifyUser(int id, string name, byte[] password, byte[] passwordSalt, int validity, int identificationServer, int userID)
{
User user = m_DBEntities.User.SingleOrDefault(u => u.ID == id);
if (user == null) return false;
user.Name = name;
user.Password = password;
user.PasswordSalt = passwordSalt;
user.Validity = validity;
user.IdentificationServer = identificationServer;
user.AuditUser = userID;
user.AuditDate = DateTime.Now;
m_DBEntities.Entry(user).State = EntityState.Modified;
m_DBEntities.SaveChanges();
//Log((int)LogTypes.Modify, "Felhasználó szerkesztve - ID: " + user.ID, userID);
return true;
}
public bool RemoveUser(int id, int userID)
{
User user = m_DBEntities.User.SingleOrDefault(u => u.ID == id);
if (user == null) return false;
List<User_group_pair> pairsWithUser = GetUserPairsWithUser(user.ID);
foreach (User_group_pair ugp in pairsWithUser)
{
m_DBEntities.User_group_pair.Remove(ugp);
}
//Log((int)LogTypes.Remove, "Felhasználó törölve - ID: " + user.ID, userID);
m_DBEntities.User.Remove(user);
m_DBEntities.SaveChanges();
return true;
}
public bool AttemptLogin(string username, string password, out int userID)
{
userID = -1;
List<User> users = GetUsers();
foreach (User user in m_DBEntities.User)
{
if (username == user.Username && PasswordEncription.VerifyPassword(password, user.PasswordSalt, user.Password))
{
userID = user.ID;
return true;
}
}
// Just to add a default user if the database is empty - this is what's not working.
// I will delete this afterwards, but here is when I realized that my data is not saved.
if (m_DBEntities.User.Count() == 0)
{
Console.WriteLine("Empty");
byte[] passwordSalt = PasswordEncription.GenerateSalt();
byte[] passwordHashed = PasswordEncription.ComputeHash(password, passwordSalt);
AddUser("Maul Ádám", username, passwordHashed, passwordSalt, (int)ValidityStates.ENABLED, -1, -1);
}
return false;
}
}
}
namespace Controller.DBManagement
{
public partial class DBManager
{
public bool GetUsergroup(int id, out Usergroup usergroup)
{
usergroup = m_DBEntities.Usergroup.SingleOrDefault(ugp => ugp.ID == id);
return usergroup == null ? false : true;
}
public void AddUsergroup(string name, int validity, int userID)
{
Usergroup usergroup = new Usergroup();
usergroup.Name = name;
usergroup.Validity = validity;
usergroup.AuditUser = userID;
usergroup.AuditDate = DateTime.Now;
m_DBEntities.Usergroup.Add(usergroup);
m_DBEntities.SaveChanges();
Log((int)LogTypes.Add, "Felhasználói csoport hozzáadva - ID: " + usergroup.ID, userID);
}
public bool ModifyUsergroup(int id, string name, int validity, int userID)
{
Usergroup usergroup = m_DBEntities.Usergroup.SingleOrDefault(ugp => ugp.ID == id);
if (usergroup == null) return false;
usergroup.Name = name;
usergroup.Validity = validity;
usergroup.AuditUser = userID;
usergroup.AuditDate = DateTime.Now;
m_DBEntities.SaveChanges();
Log((int)LogTypes.Modify, "Felhasználói csoport szerkesztve - ID: " + usergroup.ID, userID);
return true;
}
public bool RemoveUsergroup(int id, int userID)
{
Usergroup usergroup = m_DBEntities.Usergroup.SingleOrDefault(ugp => ugp.ID == id);
if (usergroup == null) return false;
List<User_group_pair> userPairsWithGroup = GetUserPairsWithGroup(usergroup.ID);
foreach (User_group_pair ugp in userPairsWithGroup)
{
m_DBEntities.User_group_pair.Remove(ugp);
}
List<Group_module_pair> modulePairsWithGroup = GetModulePairsWithGroup(usergroup.ID);
foreach (Group_module_pair gmp in modulePairsWithGroup)
{
m_DBEntities.Group_module_pair.Remove(gmp);
}
Log((int)LogTypes.Remove, "Felhasználói csoport törölve - ID: " + usergroup.ID, userID);
m_DBEntities.Usergroup.Remove(usergroup);
m_DBEntities.SaveChanges();
return true;
}
}
}
namespace Controller.DBManagement
{
public partial class DBManager
{
public List<User> GetUsersWithGroup(int groupID)
{
return (from ugp in m_DBEntities.User_group_pair
where ugp.GroupID == groupID
select ugp.User).ToList();
}
public List<Usergroup> GetGroupsWithUser(int userID)
{
return (from ugp in m_DBEntities.User_group_pair
where ugp.UserID == userID
select ugp.Usergroup).ToList();
}
public List<User_group_pair> GetUserPairsWithGroup(int groupID)
{
return (from ugp in m_DBEntities.User_group_pair
where ugp.GroupID == groupID
select ugp).ToList();
}
public List<User_group_pair> GetUserPairsWithUser(int userID)
{
return (from ugp in m_DBEntities.User_group_pair
where ugp.UserID == userID
select ugp).ToList();
}
}
}
重新启动程序时,对空的检查将返回true,并且该记录将添加到本地,但每次运行都会消失。
答案 0 :(得分:0)
通过删除密码哈希的部分,我知道它能以某种方式工作,但我不确定在那里发生了什么,但是现在可以了。