C# 如何进行有效的插入?

C# 如何进行有效的插入?,c#,asp.net-mvc,performance,entity-framework,insert,C#,Asp.net Mvc,Performance,Entity Framework,Insert,当我向数据库插入一个新对象时,我将它与另一个对象绑定在一起,通过执行另一个数据库查找,我想删除这个额外的步骤以提高效率,即如何仅使用ID设置与另一个对象的关系,而不必从数据库获取整个对象?e、 g: Car C = new Car(); C.Person = db.person.find(PersonID); //unnecessary lookup //I'd like to do: C.setPersonID(personID); db.cars.add(C); db.saveChanges

当我向数据库插入一个新对象时,我将它与另一个对象绑定在一起,通过执行另一个数据库查找,我想删除这个额外的步骤以提高效率,即如何仅使用ID设置与另一个对象的关系,而不必从数据库获取整个对象?e、 g:

Car C = new Car();
C.Person = db.person.find(PersonID); //unnecessary lookup
//I'd like to do: C.setPersonID(personID);
db.cars.add(C);
db.saveChanges();
其中型号:

class Car
{
   public virtual Person Person { get; set; }
}

假设是一对一的关系,您可以这样做:

public class Car
{
    public int Id { get; set; }
    public int PersonId { get; set; }
    public Person Person { get; set; }
}

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class CarConfiguration : EntityTypeConfiguration<Car>
{
    public CarConfiguration()
    {
        HasKey(i => i.Id);
        HasRequired(i => i.Person).WithMany().HasForeignKey(i => i.PersonId).WillCascadeOnDelete(false);
    }
}

您可能会发现这很有用。

使用外键并相应地设置外键属性

我还没有运行这个来确认,但我相信实体框架使用了一个基于约定的ID系统。这很可能会自动完成你不想发生的事情

class Car
{
   public virtual Person Person { get; set; }
   public virtual Int32   PersonID { get; set; }
}

我本来打算发布NerdDinner项目中的代码,我以前在那里见过它(),但您可以查找它,因为它是相当多的属性代码。

谢谢,我不想改为使用自定义上下文,我只是使用BasedContext。所以我喜欢为ID属性设置访问器的想法。我想知道我是否可以创建一个方法setPersonID(myID){Person p=new Person;p.id=myID;this.Person=p;}不确定这是否可行,因为如果不显式声明外键,您将无法使用id设置关系。您可以添加setPersonID(int personId)方法设置Id。不确定这是否是您的意思。是的,这就是我的意思,当然没有personId属性,所以我猜您必须实例化Person对象并设置其Id。看起来EF会更优雅地满足这一点
class Car
{
   public virtual Person Person { get; set; }
   public virtual Int32   PersonID { get; set; }
}