2017-05-15 74 views
0

我是实体框架中的新手。我想我有一个简单的疑问,但我没有在其他帖子中找到答案。坚持对象 - 实体框架

我:

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

感谢您的帮助!

回答

0

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

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

+0

如何在我的代码中执行此操作?你有一个例子吗? –

+0

您已经在更改A_B的状态,其方式如下: context.Entry(A).State = EntityState.Modified; context.Entry(B).State = EntityState.Modified; 更改SaveChanges方法之前的状态。 –

+0

谢谢Daniel, 但是没有必要修改A和B.有没有其他办法? –

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课程很好地介绍了实体框架。

+0

好吧蒂姆。谢谢! –