如何做高效的插入?

时间:2013-02-01 23:57:02

标签: c# asp.net-mvc performance entity-framework insert

当我向数据库插入一个新对象时,我将它与另一个对象绑定,通过执行另一个数据库查找,我想删除这个额外的步骤以提高效率,IE我如何使用just设置与另一个的关系ID,而不是从DB获取整个对象? 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();

其中model:

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

3 个答案:

答案 0 :(得分:2)

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

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的人添加新车,并假设具有该ID的人员存在:

using (var ctx = new CarContext())
{
    var car = new Car();
    car.PersonId = 5;
    ctx.Cars.Add(car);
    ctx.SaveChanges();
}

您可能会发现此link有用。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我没有对此进行确认,但我相信实体框架使用了基于会议的ID系统。这可能会自动完成您不希望发生的事情。

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

我打算在NerdDinner项目中发布我之前看过的代码(http://nerddinner.codeplex.com/),但你可以查看它,因为它是相当属性的代码。