C#设置外键
C# setting foreign key
我有一个表单可以将主人和宠物的数据输入数据库。宠物有一个主人id的外键,主人和宠物的数据填在同一个表格里,那么宠物对象中没有设置ownerID
怎么设置宠物对象的主人id数据库了吗?或者我必须先在数据库中设置所有者?
Class Owner
属性
private int32 idOwner;
private String name;
Class Pet
属性;
private int32 Pet;
private int32 idOwner; // foreign key
private String name;
表格
Owner owner = new Owner();
owner.Name = this.ownerNameTxt.Text.Trim();
OwnerService.addOwner(owner); // add owner to database
Pet pet = new Pet();
pet.name = this.petNameTxt.Text.Trim();
pet.idOwner = ????????
所以你有一个标识列 idOwner
,它在插入时生成,你想在 Pet
对象中设置该标识。然后,您需要修改 OwnerService.addOwner
方法,以便 select 从数据库中生成 ID 并更新所有者对象。
private void addOwner(owner)
{
// your current logic here but modify to
// add ;SELECT SCOPE_IDENTITY(); at the end of your insert query.
// and store it in a local int. eg int ownerID = (int)cmd.ExecuteScalar();
owner.idOwner = ownerID;
}
然后你的表单代码:
Owner owner = new Owner();
owner.Name = this.ownerNameTxt.Text.Trim();
OwnerService.addOwner(owner); // add owner to database
Pet pet = new Pet();
pet.name = this.petNameTxt.Text.Trim();
pet.idOwner = owner.idOwner;
SCOPE_IDENTITY (Transact-SQL) 的文档:
Returns the last identity value inserted into an identity column in
the same scope. A scope is a module: a stored procedure, trigger,
function, or batch. Therefore, two statements are in the same scope if
they are in the same stored procedure, function, or batch.
我有一个表单可以将主人和宠物的数据输入数据库。宠物有一个主人id的外键,主人和宠物的数据填在同一个表格里,那么宠物对象中没有设置ownerID
怎么设置宠物对象的主人id数据库了吗?或者我必须先在数据库中设置所有者?
Class Owner
属性
private int32 idOwner;
private String name;
Class Pet
属性;
private int32 Pet;
private int32 idOwner; // foreign key
private String name;
表格
Owner owner = new Owner();
owner.Name = this.ownerNameTxt.Text.Trim();
OwnerService.addOwner(owner); // add owner to database
Pet pet = new Pet();
pet.name = this.petNameTxt.Text.Trim();
pet.idOwner = ????????
所以你有一个标识列 idOwner
,它在插入时生成,你想在 Pet
对象中设置该标识。然后,您需要修改 OwnerService.addOwner
方法,以便 select 从数据库中生成 ID 并更新所有者对象。
private void addOwner(owner)
{
// your current logic here but modify to
// add ;SELECT SCOPE_IDENTITY(); at the end of your insert query.
// and store it in a local int. eg int ownerID = (int)cmd.ExecuteScalar();
owner.idOwner = ownerID;
}
然后你的表单代码:
Owner owner = new Owner();
owner.Name = this.ownerNameTxt.Text.Trim();
OwnerService.addOwner(owner); // add owner to database
Pet pet = new Pet();
pet.name = this.petNameTxt.Text.Trim();
pet.idOwner = owner.idOwner;
SCOPE_IDENTITY (Transact-SQL) 的文档:
Returns the last identity value inserted into an identity column in the same scope. A scope is a module: a stored procedure, trigger, function, or batch. Therefore, two statements are in the same scope if they are in the same stored procedure, function, or batch.