我的数据库中有一个表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/

10-10 03:51