关于Grove的主键设置问题

来源:互联网 发布:网络信息时代如何赚钱 编辑:程序博客网 时间:2024/04/27 19:07

        我以前是JAVA程序员,现因公司的需国转向.net,但对以前JAVA的开发思想和方法非常怀念特别是Hibernate,我想C#和java是那么的相象,也应该有ORM框架的吧.Google一下就发现了Grove这个很好的工具.这个工具小七而实用.不过就那个短短的几句帮助文件,在使用过程中还是碰到很多问题的.

        在以前的使用中,因为数据库的主键都是自增长的,一直没有发现问题,不过有一次应用时主键不是自增长的,就出现问题了,生的的一个Users表的类如下:

 

namespace f2f
{
    
using System;
    
using Grove.ORM;
    [DataTable(
"f2f_users")]
    
public class f2f_users
    
{
        String _userID;
        String _username;
        DateTime _lastVisist;
        String _lastIP;
        String _userType;

        [KeyField(
"userID")]
        
public String userID
        
{
            
get{return this._userID;}
            
set{this._userID=value;}
        }

        [DataField(
"username")]
        
public String username
        
{
            
get{return this._username;}
            
set{this._username=value;}
        }

        [DataField(
"lastVisist")]
        
public DateTime lastVisist
        
{
            
get{return this._lastVisist;}
            
set{this._lastVisist=value;}
        }

        [DataField(
"lastIP")]
        
public String lastIP
        
{
            
get{return this._lastIP;}
            
set{this._lastIP=value;}
        }

        [DataField(
"userType")]
        
public String userType
        
{
            
get{return this._userType;}
            
set{this._userType=value;}
        }


        
public bool save() 
        
{
            
try
            
{
                ObjectOperator oo 
= getObjectOperator.getOperator();
                oo.Insert(
this);
                
return true;
            }

            
catch(Exception e)
            
{
                log.write(
"保存用户信息失败"+e.ToString());
                
return false;
            }

        }


        
public bool update() 
        
{
            
try 
            
{
                ObjectOperator oo 
= getObjectOperator.getOperator();
                oo.Update(
this);
                
return true;
            }

            
catch (Exception e)
            
{
                log.write(
"更新用户信息失败" + e.ToString());
                
return false;
            }

        }

    }

}

 

 

      我在调用save方法存对象到数据库时,总是出错.后来看一个提示:

       不能将值 NULL 插入列 'userID',表 'stockstar_f2f.dbo.f2f_users';列不允许有空值。INSERT 失败。
语句已终止。Trace info:INSERT  INTO [f2f_users] ([username],[lastVisist],[lastIP],[userType]) VALUES (@username,@lastVisist,@lastIP,@userType)

       很明显,没有插入主键userID,后来反编译一下,反现:

       private UniqueIDType pkType = UniqueIDType.AutoIdentitiy;

       原来默认主键是自增长的,后来我查了一下资料,把KeyFeild做了如下修改就保存成功了.

       [KeyField("userID", KeyType = UniqueIDType.OtherDefinition)]

 
原创粉丝点击