Knight Data Access Layer
Primary Keys
Basic Tasks C# > Mapping > Primary Keys

Primary Key Overview

Integer or long primary keys are automatically mapped.  If the default convention is used then no mapping is required.  Primary keys can be of any supported type.  It is possible to have composite primary keys.  See the Composite Keys topic.

 

Primary Key Types

 

Automatic Mapping of Primary Keys

Primary key class properties are automatically mapped to the corresponding primary key in the database.  If the provider supports Identity and the primary key property is an integer or a long this will be the default.  If the primary key property is a GUID, it will default to the GUID property type.  Otherwise it will default to Assign primary key type.  These are the valid conventions for the automatic mapping. Set the Mapper.DefaultPrimaryKeyName to override the default convention.

Id

TableNameId (Example:  PersonId)

 

Mapping with Attributes

[ColumnMapping("Person_Id",System.Data.DbType.Int32),PrimaryKey(PrimaryKeyType.Identity)]

public int PersonId{ get; set; }

 

Mapping with Code

IDataHelper db = DataHelper.SessionFactory();

Table table = new Table(typeof(Person));

table.TableName = "People";

Field field = new Field(table, "PersonId", "Person_Id", true);

field.KeyType = PrimaryKeyType.Identity;

table.Fields.Add(field);

db.Mapper.ObjectMap.Add(typeof(Person),table);

 

Mapping with XML

<Table>
 <MappingFromDatabase>false</MappingFromDatabase>
 <Schema />
 <ClassTypeString>Models.Person, NET-Data-Access-Layer-Tests, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</ClassTypeString>
 <ClassName>Person</ClassName>
 <TableName>People</TableName>
 <Fields>
   <Field>
  <ColumnName>Person_Id</ColumnName>
  <PropertyInfoString>PersonId</PropertyInfoString>
  <FieldTypeString>System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</FieldTypeString>
  <DatabaseType>Int32</DatabaseType>
  <Unique>true</Unique>
  <AllowDbNull>false</AllowDbNull>
  <IsPrimaryKey>true</IsPrimaryKey>
  <KeyType>Identity</KeyType>
  <IsReadOnly>false</IsReadOnly>
  <Length xsi:nil="true" />
  <IsCompositeKey>false</IsCompositeKey>
  <IsMaintenanceField>false</IsMaintenanceField>
   </Field>
 </Fields>
</Table>