EF7在不同的上下文中添加关系实体

时间:2016-06-06 12:45:32

标签: entity-framework sqlite

我在UWP应用程序(EntityFrameworkCore.SQLite)中使用EntityFramework 7。 Microsoft建议在数据库上执行请求以提高性能时使用新上下文。 Howerver当我想在不同的上下文中添加具有现有关系的新元素时,我遇到了问题。 例如,我有一个类Person和类Dog。一个人有很多狗,一只狗只有一个主人。 就我而言,我想添加一个以现有人为所有者的新狗。

另外,我想创建一个抽象层来将数据访问与我的ViewModel分开。

以下是我的课程:

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

    public List<Dog> Dogs { get; set; }
}    

public class Dog
{
    public int DogId { get; set; }
    public string Name { get; set; }

    public int PersonId { get; set; }
    public Person Person { get; set; }

    public Dog(string name, Person person)
    {
        Name = name;
        Person = person;
    }
}

我的用例可以通过以下代码说明:

Person person = new Person() { Name = "Samuel" };
using (var db = new DatabaseContext())
{
    db.People.Add(person);
    db.SaveChanges();
}

using (var db = new DatabaseContext())
{
    Dog dog = new Dog("Droopy", person);
    db.Dogs.Add(dog);
    db.SaveChanges();
}

如果我执行此代码,EF将在数据库中创建Person的新实例。 解决方法是使用以下代码替换Dog构造函数:

public Dog(string name, Person person)
{
    Name = name;
    PersonId = person.PersonId;
}

但解决我的问题的最佳(和其他)解决方案是什么?

塞缪尔

1 个答案:

答案 0 :(得分:0)

您可以在单个数据库调用中执行所需的一切:

data