2017-05-15 89 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

好吧蒂姆。謝謝! –