2014-02-11 54 views
0

我有一個很小的數據庫,只有一個小表。實體框架生成DbSet而不是單個類

CREATE TABLE [dbo].[Connections](
     [connectionID] [bigint] IDENTITY(1,1) NOT NULL, 
     [ipAddress] [varchar](50) NULL, 
     [ConnectionGUID] [varchar](100) NULL, 
     [created] [datetime] NULL, 
     [registrationID] [varchar](100) NULL, 
    CONSTRAINT [PK_Connections] PRIMARY KEY CLUSTERED 
    (
     [connectionID] ASC 
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
    ) ON [PRIMARY] 

當我生成數據庫模型,它產生:

public virtual DbSet<Connections> Connections { get; set; } 

的:

public partial class Connections 
    { 
     public long connectionID { get; set; } 
     public string ipAddress { get; set; } 
     public string ConnectionGUID { get; set; } 
     public Nullable<System.DateTime> created { get; set; } 
     public string registrationID { get; set; } 
    } 

我不知道爲什麼它產生的DbSet而不是單class

當我嘗試填充類和SaveChanges時,如何訪問DbSet?

using (savitassaEntities3 entities3 = new savitassaEntities3()) 
      { 
       entities3.Connections conn = new Connections(); 

      } 

它也與SignalR類相沖突因爲這是aSignalR Hub。

+0

這是基本的EF行爲。請參閱http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc或http://www.asp.net/mvc/tutorials/getting-started-with-ef-5 -using-mvc-4。至於命名空間衝突 - 爲'Connections'類使用全名稱空間,即'new entities3.Connections()'。 – Jasen

+1

這就是EF的工作原理。你的類是Connection,你的DbSet(用於EF橋接你的類和數據庫的EF包裝器)僅僅是實體(上下文)的一個屬性,我建議做出單數的BTW,然後你的命名空間問題消失,類名更合乎邏輯)。 –

+0

p.s.如果你對「這個dbset是什麼」感到困惑,而不是「爲什麼命名空間碰撞」至少要在Pluralsight上觀看EF5課程的模塊5(與你的ef模型交互)。 IIRC你有訂閱。 :) –

回答

1

從數據庫的角度來看,將DbSet視爲表,將類(Connections)視爲該表中的一行。 DbSet包含在DbContext類中,您可以將其視爲數據庫。

至於與Connections的名稱衝突,請確保完全命名空間符合條件。 entities3.Connections conn = new MyProject.MyNamespace.Connections();

因此選擇的記錄,你會做一些沿着

var cn = new savitassaEntities3(); 
var query = cn.Connections.Where(c => c.foo == bar); 

線要插入連接,使用

cn.Connections.Add(value); 
cn.SaveChanges(); 

如果我失去了你想要做什麼和你有什麼,隨時添加更多的代碼,我可以看看。

+0

但我習慣於填充類和SaveChanges()。你能告訴我這樣做的代碼嗎? – user2471435

+0

你沒有填充dbset。您正在使用dbset作爲工具從數據庫檢索數據並實現類。例如,如果你想要一個特定的集合,其id值是47:entities3.collections.find(47)將爲該特定集合返回一個集合類實例。同樣,我建議將該類重新命名爲單數,因此它與dbset邏輯和區分, –

+0

但數據庫中沒有任何內容。我只是想把一些東西。 – user2471435