持久对象 - 实体框架

时间:2017-05-15 20:11:20

标签: c# entity-framework

我是Entity Framework的新手。我想我有一个简单的疑问,但我在其他帖子中找不到答案。

我有:

public class A_B
{
    private int Id;
    private string name;

    private A a;
    private B b;
}

public class A
{
    private int Id;
    private string name;
}

public class B
{
    private int Id;
    private string name;
}

当我要求实体框架在数据库中创建对象A_B时,实体框架也在数据库中创建A_B,A和B.我不想在数据库中创建对象A和B. A和B已经在数据库中。我只想保存A_B。

在数据库中创建A_B的命令是:

context.Entry(A_B).State = EntityState.Modified;

context.Entry(A_B).State = EntityState.Added;
DbContext.SaveChanges();

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

实体框架正在创建现有对象,因为在上下文中未跟踪,因此上下文正在数据库上创建实体。

您需要跟踪对象,将A和B的状态更改为Modified以附加到当前上下文,并避免在db上创建。

答案 1 :(得分:0)

如果已经构建/部分构建了数据库,则可以根据数据库构建代码。为Microsoft.EntityFrameworkCore.Design,Microsoft.EntityFrameworkCore.SqlServer(假设您正在使用SQL Server)和Microsoft.EntityFrameworkCore.Tools添加nuget包。然后,您可以运行类似于下面的命令来自动生成代码。

Scaffold-DbContext "Server=[servername];Database=[databasename];Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Test

查看this课程,了解对Entity Framework的详细介绍。