【IT168技术文档】
CUD就是Create, Update, Delete。在别人都写过了后,还有什么是新鲜的呢?
1,
CreateDatabase
Northwind db = new Northwind("You connection string"); //注意database项,起一个不存在的数据库名称
db.Log = Console.Out;
if (!db.DatabaseExists()) //如果,数据库不存在
db.CreateDatabase(); //创建数据库
这个的好处,就是你可以用OR designer设计实体类,定义其在数据库的各个column,然后,将其返回到数据库。前段时间,和别人争论起,在程序设计时,是先有实体类还是先有实体表时,其主张,是由高层到底层,即先设计实体类,再做表。那这个恰好满足了这个需要。但是,在OR designer上设计实体类的数据库属性时,及其难用,我宁愿根据实体类,去设计数据库中的表,然后,在重新生成这些实体类。
2, Inser记录
2.0
这个操作相当简单。new出来一个对象,使用Add方法将其加入到其对应Entity集合中后,使用SubmitChanges函数即可。
var newCustomer = new Customer { CustomerID = "MCSFT",
CompanyName = "Microsoft",
ContactName = "John Doe",
ContactTitle = "Sales Manager",
Address = "1 Microsoft Way",
City = "Redmond",
Region = "WA",
PostalCode = "98052",
Country = "USA",
Phone = "(425) 555-1234",
Fax = null
};
db.Customers.Add(newCustomer);
db.SubmitChanges();
2.1
如果,数据表中有数据库自动赋值的column的呢?就拿Orders表来说事。其OrderID就是自增型的。看看该字段的映射。
[Column(Storage="_OrderID", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
public int OrderID
{
get
{
return this._OrderID;
}
set
{
if ((this._OrderID != value))
{
this.OnOrderIDChanging(value);
this.SendPropertyChanging();
this._OrderID = value;
this.SendPropertyChanged("OrderID");
this.OnOrderIDChanged();
}
}
}
在其Attribute中,有AutoSync=AutoSync.OnInsert. 当有IsDbGenerated为true时,OnInsert为AutoSync默认值。该字段告诉run-time,在插入数据库后,自动更新数据库产生的值。 我们随便来做个测试,看看Linq To Sql做了什么。
Orders o = new Orders();
o.ShipAddress = "Test";
db.Orders.Add(o);
db.SubmitChanges();
Console.WriteLine(o.OrderID);
你可以扑获如下的sql
INSERT INTO [dbo].[Orders]([CustomerID], [EmployeeID], [OrderDate], [RequiredDate], [ShippedDate], [ShipVia], [Freight], [ShipName], [ShipAddress], [ShipCity], [ShipRegion], [ShipPostalCode], [ShipCountry]) VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, @p9, @p10, @p11, @p12)
SELECT [t0].[OrderID]
FROM [dbo].[Orders] AS [t0]
WHERE [t0].[OrderID] = (SCOPE_IDENTITY())
-- @p0: Input StringFixedLength (Size = 5; Prec = 0; Scale = 0) []
-- @p1: Input Int32 (Size = 0; Prec = 0; Scale = 0) []
-- @p2: Input DateTime (Size = 0; Prec = 0; Scale = 0) []
-- @p3: Input DateTime (Size = 0; Prec = 0; Scale = 0) []
-- @p4: Input DateTime (Size = 0; Prec = 0; Scale = 0) []
-- @p5: Input Int32 (Size = 0; Prec = 0; Scale = 0) []
-- @p6: Input Currency (Size = 0; Prec = 19; Scale = 4) []
-- @p7: Input String (Size = 0; Prec = 0; Scale = 0) []
-- @p8: Input String (Size = 4; Prec = 0; Scale = 0) [Test]
-- @p9: Input String (Size = 0; Prec = 0; Scale = 0) []
-- @p10: Input String (Size = 0; Prec = 0; Scale = 0) []
-- @p11: Input String (Size = 0; Prec = 0; Scale = 0) []
-- @p12: Input String (Size = 0; Prec = 0; Scale = 0) []
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1