C# 如何获取自动生成的Id?

C# 如何获取自动生成的Id?,c#,sql,database,linq,linq-to-sql,C#,Sql,Database,Linq,Linq To Sql,我有一个用户对象/类和db表。用户有多个地址,我已经定义了Addresses表,如何添加地址并将其提交到DB 我为用户创建了一个Add函数(见下文),User类保存一个地址列表 用户类 System Language:C# Database:SQL IDE:C# Express 2010 id name addresses 表地址 System Language:C# Database:SQL IDE:C# Express 2010 id name addresses 我在User类中有

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

我为用户创建了一个Add函数(见下文),User类保存一个地址列表

用户类

System
Language:C#
Database:SQL
IDE:C# Express 2010
id
name
addresses
表地址

System
Language:C#
Database:SQL
IDE:C# Express 2010
id
name
addresses
我在User类中有Add函数来添加用户对象,我去掉了处理代码以使其更清晰

我的问题是,如何获取刚刚添加的用户的id并将地址添加到数据库中。 及 如何在地址表上定义FK

id 
address
user_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;
    }
//
//创建和设置对象
//
用户=新用户(name=“john doe”);
EntitySet
AddressList=new EntitySet(); 地址列表。添加(新地址(“住宅”); 地址列表。添加(新地址(“度假屋…”); user.address=地址列表; // //坚持数据库 // var db=new DataContext(); db.Results.InsertOnSubmit(结果); db.SubmitChanges();
您可以对上面的Add方法做一个更改。您可以返回int类型,而不是返回bool

//
// 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();
因此,您可以通过调用user类的Add方法来获取新添加的用户id,并可以使用该id为用户创建地址列表

我的问题是,如何获取刚刚添加的用户的id并添加 将地址输入数据库

关键是您不需要它。在Linq-2-sql中,您不需要为外键字段分配id,而是相互分配实体

因此,与其这样做

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;

}
是吗

somerelated_table.fk_user_id = user.id

当您调用SubmitChanges时,Linq-2-sql将处理user.id的正确分配。另外,作为奖励,它将在一个事务中完成。这就是Linq-2-sql的优点。

设置FK的问题是,我在设计器中看不到创建FK的任何地方。我进入了键/索引,但我看不到如何将字段链接到t用户表是我喜欢的方法。关于如何在地址上设置约束FK有什么想法吗?如果您已经定义了外键、用户表和地址表之间的主键约束,那么LINQ数据类将默认提供外键约束。您可以在用户类内创建一个方法:void AddAddress(int id,List){。在方法内部,您可以传递要插入地址的用户的id。在插入地址之前,您可以检查id是否存在于用户表中。即使不检查,也会引发Foreignkey冲突异常。您可以处理异常,也可以在插入id之前验证id。在designer dbm中l、 您可以单击类,例如User,右键单击它将为您提供创建关系的选项。通过在User和Address之间创建关系,您可以创建约束。感谢@techfun-我找到了它,我在设置字段时查看了属性窗口。因此,当我坚持使用我的User对象时,它也会写入我的地址?所以当我写db.Users.InsertOnSubmit(user);db.SubmitChanges();时,它会写入两个表?我尝试了这个,但没有收到任何数据。非常感谢,这为我节省了很多工作时间。我成功了,再次感谢