0
System
Language:C#
Database:SQL
IDE:C# Express 2010

我有一个用户对象/类和数据库表。用户有多个地址,我已经定义了地址表,如何添加地址并将其提交到数据库

我为用户创建了一个添加函数(见下文)用户类包含一个列表地址

用户类

int id
string name
List<Address> adresses

表用户

id
name
addresses

表地址

id 
address
user_id (FK)

我在 User 类中有 Add 函数来添加用户对象,我删除了处理代码以使其在 SO 上更清晰。

我的问题是,如何获取刚刚添加的用户的 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();
4

2 回答 2

1

您可以对上述方法 Add 进行一项更改。您可以返回 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;

}

因此,您可以通过调用 User 类的 Add 方法获取新添加的用户的 id,您可以使用该 id 为用户创建地址列表。

于 2012-11-15T08:48:44.507 回答
1

我的问题是,如何获取刚刚添加的用户的 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 的美妙之处。

于 2012-11-15T12:32:23.960 回答