Q.例如是否有可能在Visual Studio中輕鬆創建一個強類型數據層,將插入/更新/刪除等後自動看?
實體框架聽起來像你正在尋找的東西。當然,有一些設置涉及。對於大多數Web項目,Entity Framework會自動添加,如果不是,您可以隨時通過NuGet包管理器添加它。
EntityFramework通過DbContext對象將模型綁定到數據庫,如果基於模型不存在,Code First甚至會生成一個數據庫(如果存在並且模型更改,則可能需要遷移:More reading )。我將採取這種方法(您可以稍後將以下代碼更改爲連接字符串到實時數據庫)。
首先,您需要告訴您的應用程序使用哪個數據庫(無論它是否存在),並且這可以在Web.Config文件中完成(而不是唯一的方法)。
的Web.Config
<configuration>
....
<connectionStrings>
<add name="ConnectionStringName" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\DATABASENAME.mdf;Initial Catalog=DATABASENAME;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
注意 - 此連接字符串將只在VS2015工作。對於先前的版本,使用:現在
Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\DATABASENAME.mdf
More reading on configuring Entity Framework
,我們可以用 「的connectionStringName」 來連接我們的語境。
Context類將不得不從DbContext對象繼承,我們會將此連接字符串名稱傳遞給基礎構造函數(DbContext存在於System.Data.Entity命名空間中)。我將使用看起來完全相同兩個通用型號(MODELA ModelB) -
MODELA和ModelB
using System.ComponentModels.DataAnnotations;
public class ModelA
{
public int Id { get; set; }
[Required(ErrorMessage="You need to enter a name!")]
[StringLength(40)]
public string Name { get; set; }
}
注意 - 我使用DataAnnotations(必填,StringLength) - 這是真的很酷並且在您的模型上執行CRUD操作時可能非常有用。 也 - 實體框架將自動生成名爲:Id(或任何情況下的形式)或ModelNameId主鍵的屬性。有很多方法可以覆蓋這個。
More reading on DataAnnotations
你甚至可以考慮建立關係,你的模型。如果MODELA將與ModelB一個一對多的關係,可以反映出在代碼中這種關係:
public virtual ICollection<ModelB> ModelBs {get; set;}
More reading on creating relationships
我們現在將你的模型映射到使用DbSet收集表。這是如何看起來如下:
using System.Data.Entity;
using YourProject.Data.Models;
namespace YourProject.Data.DAL
{
public class YourContext : DbContext
{
public YourContext() : base("ConnectionStringName")
{
}
public DbSet<ModelA> ModelAs { get; set; }
public DbSet<ModelB> ModelBs { get; set; }
}
}
Database Initialization Strategies - 爲您的數據庫種植創建數據。
More reading on configuring the context
我將永遠無法所有的細節,你可以做 - 但這裏有幾個短的例子:
問:這是什麼都做什麼?
現在,您已將強類型對象連接到數據庫。這是因爲創建一個新的上下文對象一樣簡單:
YourContext yourContext = new YourContext();
檢索整個表一樣簡單:
IEnumerable<ModelA> modelAs = yourContext.ModelAs;
或編號找到一個排
ModelB modelB = yourContext.ModelBs.Find(id);
說你抓住modelB並想更新它。它是那麼容易,因爲:
modelB.Name = "Here's the new name";
yourContext.Entry(modelB).State = EntityState.Modified;
yourContext.SaveChanges();
添加:
yourContext.ModelAs.Add(newModel);
刪除:
yourContext.ModelBs.Remove(modelB);
記住添加/更新/刪除方法都將需要到的SaveChanges()的調用;從上下文。否則他們將被丟棄。
當然,這可能是實體框架可用的最基本的概要。要看到更多的行動中檢查出這些教程:
WebForms with Entity Framework - Wingtip Toys
MVC with Entity Framework - Contoso University
希望這可以有所幫助的人。
你看過Entity Framework和Fluent API嗎? –
聽起來像EF代碼第一 – Byron
@DanOrlovsky是的,只是看了EF的測試,儘管一個輕微的學習曲線一切似乎都很好。我也注意到我可以使用強類型的DataSet/DataAdaptors。任何建議哪種方法最好?我的經驗是,數據集現在是舊派,EF是前進的方向? –