[英]How do I get the auto generated Id?
System
Language:C#
Database:SQL
IDE:C# Express 2010
我有一个User对象/类和db表。 用户有多个地址,我已经定义了地址表,如何添加地址并将其提交给数据库
我为用户创建了一个Add函数(见下文)User类包含一个List地址
用户类
int id
string name
List<Address> adresses
表用户
id
name
addresses
表地址
id
address
user_id (FK)
我在User类中添加Add函数来添加用户对象,我删除了处理代码以使其更清晰。
我的问题是,如何获取刚刚添加的用户的ID并将地址添加到数据库中。 以及如何在地址表上定义FK
class User {
public static bool Add(User user, UserOptions option = UserOptions.System)
{
//Instantiate the DataClassesDataContext
var db = DBContext.Create();
//Make Sure User does not exist
//returns true if no existing user
if (Users.validateForAdd(user))
{
//Now add
db.Users.InsertOnSubmit(user);
//I assume I would get the id of the user just added but not sure how I do that
db.SubmitChanges();
return true;
}
//Failed to add
return false;
}
我想我会从下面的答案和评论中发布最终解决方案。
//
// Creating and setting the Objects
//
User user = new User(name="john doe");
EntitySet < Address > adressList = new EntitySet<Address>();
adressList.Add(new Address("Residential Home");
adressList.Add(new Address("Holiday Home...");
user.address = adressList;
//
//Persisting to the DB
//
var db = new DataContext();
db.Results.InsertOnSubmit(result);
db.SubmitChanges();
您可以对上面的方法添加一个更改。 您可以返回int类型,而不是返回bool。
public static int Add(User user, UserOptions option = UserOptions.System)
//Make Sure User does not exist
//returns true if no existing user
if (Users.validateForAdd(user))
{
....
....
//Instead of returning true you can return user.id
return user.id;
}
//Instead of returning false you can return default value -1
return -1;
}
因此,您可以通过调用Add of User类的方法获取新添加的用户ID,并且可以使用该id为用户创建地址列表。
我的问题是,如何获取刚刚添加的用户的ID并将地址添加到数据库中。
关键是你不需要它 。 在Linq-2-sql中,您可以将实体分配给彼此,而不是使用id分配外键字段。
所以不要这样做
somerelated_table.fk_user_id = user.id
你做
somerelated_table.user = user
当您调用SubmitChanges时,Linq-2-sql将处理user.id的正确分配。 另外,作为奖励,它将在一次交易中完成。 这就是linq-2-sql的美妙之处。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.