新聞中心
Entity Framework(EF)是一個相當(dāng)出色的ORM框架。它提供了一種輕松的方式來管理 .NET 應(yīng)用程序中與數(shù)據(jù)庫之間的交互。每個數(shù)據(jù)庫帶來的模式和模式限制,因此 EF 展現(xiàn)出了它所支持的功能的同時使其適應(yīng)不同的數(shù)據(jù)庫。然而,當(dāng)有些值的表達方式不適合數(shù)據(jù)模型,這種情況可能會出現(xiàn)問題。

在 Entity Framework 中,非數(shù)據(jù)庫字段可以非常有用。在本文中,我們將探討在 EF 框架中使用非數(shù)據(jù)庫字段的用法。我們將探討如何創(chuàng)建和使用這些字段,如何應(yīng)用在查詢和數(shù)據(jù)模型上,以及 EF 中的限制。
什么是非數(shù)據(jù)庫字段?
一個非數(shù)據(jù)庫字段,是一個沒有對應(yīng)數(shù)據(jù)庫列的屬性。在 EF 中,它被稱為計算字段(Computed Fields)或非映射字段(Unmapped Fields)。它們可能是由開發(fā)人員計算或指定,或者通過表達式或?qū)傩缘慕M合生成。
這些字段有很多不同的用途。例如,開發(fā)人員可以使用非數(shù)據(jù)庫字段添加類別屬性,例如 Color 或 Level,那么數(shù)據(jù)表中就沒有這樣的列。
在EF中創(chuàng)建非數(shù)據(jù)庫屬性
想要在EF中創(chuàng)建非數(shù)據(jù)庫屬性,首先需要在數(shù)據(jù)Model實體類中定義一個屬性。這個屬性的唯一特征是它需要一個 [NotMapped] 標(biāo)記。這個標(biāo)記告訴 EF 此屬性不需要映射到數(shù)據(jù)庫中任何列。
“`csharp
public class OrderItem
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
[NotMapped]
public bool IsFree { get; set; }
}
“`
在上面的代碼段中,我們有一個 OrderItem 實體類,有 Name,Price 等等屬性。IsFree 屬性沒有映射到數(shù)據(jù)庫中的任何列,因為它有 [NotMapped] 屬性。
在EF中查詢非數(shù)據(jù)庫屬性
現(xiàn)在我們已經(jīng)定義了一個非數(shù)據(jù)庫屬性,我們要如何查詢 EF 中的計算屬性?Option 1:在我們的數(shù)據(jù)模型定義中,通過使用 LINQ 的 Select 方法選擇我們想要的屬性。在我們的例子中,我們可以選擇 OrderItem 實體類中的 Name、Price 和 IsFree。
“`csharp
var orderItems = context.OrderItems
.Select(x => new
{
x.Name,
x.Price,
IsFree = x.Price == 0
}).ToList();
“`
在代碼中,我們選擇 OrderItem 實體類的幾個屬性,包括 Name 和 Price。但是,我們還可以創(chuàng)建 IsFree 計算屬性,它只是一個簡單的布爾表達式,告訴我們當(dāng)前 OrderItem 是否免費。EF 還可以為我們計算值。
Option 2:運用存儲過程或 SQL 查詢,在這方面我們可以為 Entity Framework 添加 Database SQL 查詢非數(shù)據(jù)庫字段。我們可以在我們的數(shù)據(jù)模型中使用 FromSqlRaw 方法或 FromSql Interpolated 方法并在方法中使用僅支持?jǐn)?shù)據(jù)庫提供者的 SQL 查詢,如下所示:
“`csharp
var orderItems = context.OrderItems.FromSqlRaw(
@”SELECT Id, Name, Price,
CASE
WHEN Price = 0 THEN CAST(1 AS BIT)
ELSE CAST(0 AS BIT)
END AS IsFree
FROM OrderItems”)
.ToList();
“`
在上面的 SQL 查詢中,我們?yōu)?OrderItem 的 Price 計算 IsFree 屬性的值。這可以通過在 SQL 查詢中使用 CASE 語句輕松實現(xiàn)。
一些注意點
現(xiàn)在我們已經(jīng)知道如何在 EF 中使用非數(shù)據(jù)庫字段了。盡管非數(shù)據(jù)庫字段提供了很多好處,但也有一些限制和注意事項。
– 非數(shù)據(jù)庫字段不保存在數(shù)據(jù)庫中:因為我們使用 [NotMapped] 標(biāo)記告訴 EF 我們不想映射到數(shù)據(jù)庫中的列。這意味著非數(shù)據(jù)庫字段不會保存到數(shù)據(jù)庫中。當(dāng)然,我們可以使用 LINQ 或 SQL 查詢的方式獲取這些值。
– 非數(shù)據(jù)庫字段不支持修改等數(shù)據(jù)操作:我們不能對非數(shù)據(jù)庫字段做出如 Add、Remove、Update 等增刪改操作。我們需要修改相應(yīng)的屬性并進行更新。
– 非數(shù)據(jù)庫字段可以通過 SQL 查詢或存儲過程添加:我們已經(jīng)在代碼中看到了如何使用 SQL 查詢或存儲過程向 EF 中添加非數(shù)據(jù)庫字段。
– 不支持在 EF 中將實體對象編寫為計算字段:雖然我們可以將實體屬性標(biāo)記為非映射屬性,但是我們不能將整個實體對象標(biāo)記為非映射字段。
結(jié)論
非數(shù)據(jù)庫字段可以為我們的程序帶來很多好處。這些字段可以讓我們輕松地將其他屬性和枚舉添加到當(dāng)前的實體類型中。例如,我們可能會發(fā)現(xiàn)某些實體在編寫時需要一些臨時屬性。此時非數(shù)據(jù)庫字段將是非常有用的。
在本文中,我們已經(jīng)了解了 EF 框架中非數(shù)據(jù)庫字段的使用方法。我們學(xué)習(xí)了如何創(chuàng)建和使用這些字段,例如如何在查詢和數(shù)據(jù)模型上使用非數(shù)據(jù)庫字段。我們還了解了一些 EF 中的限制。希望這篇文章是有用的,無論您是一名開發(fā)人員還是一名數(shù)據(jù)庫管理員。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,響應(yīng)式網(wǎng)站制作,設(shè)計師量身打造品牌風(fēng)格,熱線:028-86922220Ef DbMigration 非主鍵字段 怎么設(shè)置為自增
理論上來說
你的
和我的這個
this.Property(p => p.DishCode).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
意義是一樣的
至于你說的 那種 我其實也試過 主鍵是肯定可以的 這個我也做過
ef code first 怎么生成數(shù)據(jù)庫字段說明
就是為字段(model中的屬性)設(shè)置默認(rèn)值,如果不填時有默認(rèn)值或者比如checkbox默認(rèn)選中
ef core使用code first無法為mysql數(shù)據(jù)表設(shè)置字段默認(rèn)值,該怎么辦
這里我們選擇 ASP.NET Core Web Application (.NET Core)
這里選擇web 應(yīng)用程序,然后更改身份驗證 改為 不進行身份驗證
然后再包管理控制臺里執(zhí)行下面兩條命令
引用 EntityFrameworkCore
Install-Package Microsoft.EntityFrameworkCore
再引用 EntityFrameworkCore.SqlServer
Install-Package Microsoft.EntityFrameworkCore.SqlServer
創(chuàng)建實體
我們在項目添加一個 Models 文件夾。
新建一個User.cs
public class User
{
public int Id { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
}
這里我為了方便,繼續(xù)新建 DataContext.cs
public class DataContext : DbContext
{
public DataContext(DbContextOptions options)
: base(options)
{
}
public DbSet Users { get; set; }
}
創(chuàng)建數(shù)據(jù)庫
打開 Startup.cs 在 ConfigureServices 下添加如下代碼:
public void ConfigureServices(IServiceCollection services)
{
//這里就是填寫數(shù)據(jù)庫的鏈接字符串
var connection = “Data Source=.;Initial Catalog=EFCore;User ID=sa;Password=sa.123”;
services.AddDbContext(options => options.UseSqlite(connection));
// Add framework services.
services.AddMvc();
}
ef 非數(shù)據(jù)庫字段的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于ef 非數(shù)據(jù)庫字段,EF框架中的非數(shù)據(jù)庫字段用法介紹,Ef DbMigration 非主鍵字段 怎么設(shè)置為自增,ef code first 怎么生成數(shù)據(jù)庫字段說明,ef core使用code first無法為mysql數(shù)據(jù)表設(shè)置字段默認(rèn)值,該怎么辦的信息別忘了在本站進行查找喔。
創(chuàng)新互聯(lián)是成都專業(yè)網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計、SEO優(yōu)化、手機網(wǎng)站、小程序開發(fā)、APP開發(fā)公司等,多年經(jīng)驗沉淀,立志成為成都網(wǎng)站建設(shè)第一品牌!
當(dāng)前名稱:EF框架中的非數(shù)據(jù)庫字段用法介紹(ef非數(shù)據(jù)庫字段)
網(wǎng)頁URL:http://fisionsoft.com.cn/article/cdodooo.html


咨詢
建站咨詢
