C# 使用实体框架6将父实体与数据库中现有的子实体连接起来

C# 使用实体框架6将父实体与数据库中现有的子实体连接起来,c#,database,entity-framework,entity-framework-6,C#,Database,Entity Framework,Entity Framework 6,我正在使用Entity Framework 6设计和使用一个数据库,该数据库有一个子用户表,如下所示: public class User { public long Id { get; set; } public string UserName { get; set; } public string CompanyId { get; set; } } public class Order { public long OrderId { get; set

我正在使用Entity Framework 6设计和使用一个数据库,该数据库有一个子用户表,如下所示:

public class User
{
    public long Id { get; set; }
    public string UserName { get; set; }
    public string CompanyId { get; set; }
}
    public class Order
{
    public long OrderId { get; set; }
    public int ItemCount { get; set; }
    public DateTime OrderDate{ get; set; }
    ...

    public virtual User User { get; set; }

}
以及一个如下所示的订单表:

public class User
{
    public long Id { get; set; }
    public string UserName { get; set; }
    public string CompanyId { get; set; }
}
    public class Order
{
    public long OrderId { get; set; }
    public int ItemCount { get; set; }
    public DateTime OrderDate{ get; set; }
    ...

    public virtual User User { get; set; }

}
在我的数据库中,表示订单表中用户表的字段是
User\u Id

现在我的问题(可能是数据库设计问题)是,在数据库中创建新用户和订单之前,我想检查用户是否存在,如果存在,则将其链接到新订单,而不是创建新用户。我有一个方法,可以在用户不存在时添加新用户,并返回创建的或现有用户的
Id
字段值

如何创建一个新的Order实例,该实例采用
Id
值而不是
User
对象来避免重复用户,或者有更好的方法来处理此用例


我试图返回对象而不是用户ID,但它在用户表中保存了一个新用户

不确定这是否解决了您的问题。但这种方法应该确保您不会创建另一个用户对象,而是从数据库中检索用户对象

 public class UserHandler
    {
        //Use dbcontext instead to get a user list
        public List<User> UserList = new List<User>();
        public void handleUserList(int id)
        {
            User oneUser = UserList.FirstOrDefault(n => n.id==id);
            if (oneUser.Equals(null))
            {
                oneUser = new User();
                //Functionality to save the user information
            }
        }
    }

我可以检查用户是否存在,或者创建一个新用户。问题是,每当我保存一个新订单时,它也会保存一个新用户,即使该用户存在(我发送一个包含id的用户,但无论如何都会创建一个新的用户),您应该在
user
类中拥有
ICollection Orders
属性。