【发布时间】:2016-04-20 12:55:45
【问题描述】:
我的数据库中有一个表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 和电子邮件? it inserts fine,但代码对我来说看起来很糟糕。感谢您的帮助。
【问题讨论】:
-
ID的内容是什么?
-
你的 SQL_INSERT 字符串强迫你提供所有参数,你应该动态地为查询建立参数。
-
您有什么理由要创建自己的本土 ORM?其中许多问题已经被实体框架或 NHibernate 等 ORM 解决了。为什么不选择现成的东西,以免浪费时间复制已经存在的东西?
-
"在数据库中,我有一个 INSTEAD OF INSERT 触发器,它根据姓氏和数字创建
ID和email。"他没有为这些值存储空值或空白。 -
@fqhv - 我错过了,谢谢。
标签: c# sql sql-server tsql