2011-08-02 133 views
1

我正在玩EF中的POCO,從小型基本設置工作到更先進的東西。沒有泛型的接口,只是一個簡單的入口點。 首先,我創建了一個.edmx文件,其中只包含一個實體:Person,具有3個屬性。 Id,FirstName和LastName。嘗試使用ObjectContext連接到數據庫,但失敗

有了這個,我生成了數據庫並手動添加了幾條記錄。這個數據庫被稱爲「PocoTest」在我App.Config中的連接位的樣子:

<add name="PocoTestContainer" connectionString="metadata=res://*/PocoTest.csdl|res://*/PocoTest.ssdl|res://*/PocoTest.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=SEBASTIAAN-PC\SQLEXPRESS;Initial Catalog=PocoTest;Integrated Security=True;Pooling=False;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" /> 

首先我創建了一個實體:

public class Person 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

現在,我創建了一個語境,從ObjectContext的繼承:

public class PocoTestContext : ObjectContext 
{ 
    private IObjectSet<Person> persons; 

    public PocoTestContext() 
     : base("name=PocoTestContainer", "PocoTestContainer") 
    { 
     ContextOptions.LazyLoadingEnabled = true; 
     persons = CreateObjectSet<Person>();   
    } 

    public IObjectSet<Person> Persons 
    { 
     get 
     { 
      return persons; 
     } 
    } 
} 

這裏沒什麼特別的。接下來的事情就是一個倉庫:

public class PersonRepository 
{ 
    PocoTestContext context; 

    public PersonRepository() 
    { 
     context = new PocoTestContext(); 
    } 

    public Person GetById(int id) 
    { 
     return context.Persons.Where(p => p.Id == id).FirstOrDefault(); 
    } 

    public List<Person> GetAll() 
    { 
     List<Person> persons = null; 

     try 
     { 
      persons = context.Persons.ToList(); 
     } 
     catch(Exception e) 
     { 
      Console.WriteLine(e.InnerException); 
     } 
     return persons; 
    } 

    public void Add(Person entity) 
    { 
     context.Persons.AddObject(entity); 
    } 

    public void Save() 
    { 
     context.SaveChanges(); 
    } 
} 

現在,這一切編譯罰款,但我似乎無法連接到數據庫,因爲我沒有得到任何結果返回。當我檢查PocoTestContext構造函數中的連接狀態時,連接沒有建立。 現在我猜測我使用連接字符串的方式有問題。我從另一個項目中偷取了這種方法,我在其中使用了一個生成的存儲庫。

任何幫助將不勝感激!

回答

1

我已經想出解決方案,edmx文件持有對'PersonSet'的引用,我手動將其更改爲'Person'。現在我得到了預期的結果。

1

連接未在構造函數中建立。它在需要時建立並在不需要時關閉。

+0

好的,但是這隻會改變我的問題陳述,我沒有得到任何記錄返回,而有。 因此,我必須錯過其他東西,任何指針在那個方向? – duress