1

当我将一个新对象插入数据库时​​,我将它与另一个对象关联起来,通过进行另一个数据库查找,我想删除这个额外的步骤以提高效率,IE 如何仅使用 ID 设置与另一个对象的关系,而不必从数据库中获取整个对象?例如:

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; }
}
4

3 回答 3

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();
}

您可能会发现此链接很有用。

于 2013-02-02T00:17:03.770 回答
0

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

于 2013-02-02T00:17:55.600 回答
0

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

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

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

于 2013-02-05T08:01:23.607 回答