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