刚开始用Grove,
我的代码如下:
Log log=new Log();
log.UserID="user";
log.TheTime=System.DateTime.Now;
log.IP="IP";
log.Note="test";
Grove.ORM.ObjectOperator oo=new Grove.ORM.ObjectOperator("Server=127.0.0.1;uid=sa;pwd=zoti;database=FineBijou");
try
{
oo.Insert(log);
}
catch (System.Exception ex)
{
MessageBox.Show(ex.ToString());
}
结果如下:
System.Exception: 无法将 NULL 值插入列 'UserID',表 'FineBijou.dbo.Log';该列不允许空值。INSERT 失败。
语句已终止。Trace info:INSERT INTO [Log] ([TheTime],[Note],[IP]) VALUES (@TheTime,@Note,@IP)
at Grove.Sql.DbOperatorFactory.ExecNonQuery(String cmdText)
at Grove.ORM.ObjectOperator.Insert(Object o)
at WindowsApplication1.Form1.button1_Click(Object sender, EventArgs e) in e:\我的文档\我的工作\microsoft visual studio\练习\windowsapplication1\form1.cs:line 143
为何Grove产生的SQL语句少了UserID这个参数呢?
------解决方法--------------------------------------------------------
LOG的UserID默认情况下是自动增长型的。你看[KeyField]
------解决方法--------------------------------------------------------
[KeyField("OID",KeyType=UniqueIDType.OtherDefinition)]
public stirng UserID
{
get{}
set{}
}
------解决方法--------------------------------------------------------
你检查一下映射后的实体Log类定义(Log.cs文件),检查一下主键UserID段定义,改为:
[KeyField("UserID",KeyType=UniqueIDType.OtherDefinition)]
public stirng UserID
{
get{return this._UserID;}
set{this._UserID=value;}
}
特别注意:如果你想自己给主键赋值,那在KeyField中一定要加上KeyType=UniqueIDType.OtherDefinition,否则按默认自动增长,即使你使用log.UserID="user",insert中也不会包含UserId段值。