如何修改PetaPoco类以使用包含非数字列的Composite键?

RKh*_*RKh 8 .net c# petapoco

我有一个包含以下列的表:

ContractorId ......... INT ............. IDENTITY
ContractorName ........ Varchar(50)....... PK
ContractorGrade ...... .... Varchar(3)....... PK

PetaPoco T4模板生成的类如下所示:

[TableName("contractor_master")]
[PrimaryKey("contractorname", autoIncrement=false)]
[ExplicitColumns]
public partial class contractor_master : TubewellRepo.Record<contractor_master>  
{
    [Column] 
    public int contractorid 
    { 
        get
        {
            return _contractorid;
        }
        set
        {
            _contractorid = value;
            MarkColumnModified("contractorid");
        }
    }
    int _contractorid;

    [Column] 
    public string contractorname 
    { 
        get
        {
            return _contractorname;
        }
        set
        {
            _contractorname = value;
            MarkColumnModified("contractorname");
        }
    }
    string _contractorname;

    [Column] 
    public string contractorgrade 
    { 
        get
        {
            return _contractorgrade;
        }
        set
        {
            _contractorgrade = value;
            MarkColumnModified("contractorgrade");
        }
    }
    string _contractorgrade;
  }
Run Code Online (Sandbox Code Playgroud)

INSERT新记录的代码如下:

// Insert a record
var Contractor=new contractor_master();
Contractor.contractorname = "Super Borewells";
Contractor.contractorgrade = "A";

db.Insert(Contractor);
Run Code Online (Sandbox Code Playgroud)

在类代码的第二行中,我想知道如何提及复合键,即(ContractorName + ContractorGrade).

其次,它没有插入记录,因为它需要Id列.即使ContractorId是IDENTITY,它也不是主键.

它不会插入新记录并给出错误,因为它在IDENTITY列中插入0.

Sch*_*ime 7

我的分支在这里:https://github.com/schotime/petapoco 通过指定PrimaryKey属性支持复合主键,如:

[PrimaryKey("ContractorName,ContractorGrade")]
Run Code Online (Sandbox Code Playgroud)

如果你想要那里的标识栏,我不确定它是如何工作的.