当我向数据库插入一个新对象时,我将它与另一个对象绑定,通过执行另一个数据库查找,我想删除这个额外的步骤以提高效率,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; }
}
答案 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/),但你可以查看它,因为它是相当属性的代码。