我的数据库中有一个表Teacher
:
TABLE Teacher
(
ID CHAR (7) NOT NULL ,
name VARCHAR (50) NOT NULL ,
surname VARCHAR (50) NOT NULL ,
email VARCHAR (50) NOT NULL ,
phone CHAR (13) NOT NULL
)
在数据库中,我有一个
INSTEAD OF INSERT
触发器,它根据姓和号码创建ID
和电子邮件。当我插入SQL Server时,一切正常。我可以INSERT INTO Teacher(name, surname, phone)
VALUES('John', 'Doe', '+111111111111')
我正在此数据库上实现ORM。
public static String SQL_INSERT =
"INSERT INTO \"Teacher\" VALUES (@ID, @name, @surname, @email, @phone)";
public static int Insert(Teacher teacher, Database pDb = null)
{
Database db;
if (pDb == null)
{
db = new Database();
db.Connect();
}
else
{
db = (Database)pDb;
}
SqlCommand command = db.CreateCommand(SQL_INSERT);
PrepareCommand(command, teacher);
int ret = db.ExecuteNonQuery(command);
if (pDb == null)
{
db.Close();
}
return ret;
}
private static void PrepareCommand(SqlCommand command, Teacher teacher)
{
command.Parameters.AddWithValue("@ID", teacher.ID);
command.Parameters.AddWithValue("@name", teacher.Name);
command.Parameters.AddWithValue("@surname", teacher.Surname);
command.Parameters.AddWithValue("@email", teacher.Email);
command.Parameters.AddWithValue("@phone", teacher.Phone);
}
问题是当我尝试从ORM插入时。我必须这样做,因为它不允许我在没有所有必需属性的情况下插入。
Teacher newTeacher = new Teacher ();
newTeacher.ID = "";
newTeacher.Name= "John";
newTeacher.Surname= "Doe";
newTeacher.Email = "";
newTeacher.Phone= "+111111111111";
TeacherTable.Insert(newTeacher, db);
有什么方法可以插入而不必在ID和Email中分配空字符串? it inserts fine,但是代码对我来说似乎很糟糕。感谢帮助。
最佳答案
ORM正在执行应有的操作。如果您的表字段可以为空,并且您的变量是未设置的引用类型,则应插入NULL。字符串是引用类型。
解决此问题的最干净的方法之一是向“教师”类添加一个构造函数,为所有值设置默认值,这样,您不必在每次创建新对象时都对其进行设置。
例如。
public class Teacher
{
public Teacher()
{
ID = "";
Name= "";
Surname= "";
Email = "";
Phone= "";
}
....
}
然后,您可以执行以下操作:
Teacher newTeacher = new Teacher ();
newTeacher.Name = "Johnny";
TeacherTable.Insert(newTeacher, db);
仅设置您需要的变量,其他所有变量将是构造函数中的默认设置。
关于c# - 使用INSTEAD OF INSERT TRIGGER的C#INSERT,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36744495/