3 回答

TA貢獻(xiàn)1951條經(jīng)驗 獲得超3個贊
如果像我一樣,您僅對映射來自其他數(shù)據(jù)庫的實體(在本例中為erp)感興趣,以將其與應(yīng)用程序特定的實體相關(guān)聯(lián),那么可以像使用表一樣使用視圖(在以同樣的方式!)。顯然,如果您嘗試更新該實體,則如果視圖不可更新,則會出現(xiàn)異常。該過程與普通(基于表)實體的情況相同:
為視圖創(chuàng)建POCO類;例如FooView
在DbContext類中添加DbSet屬性
使用FooViewConfiguration文件為視圖設(shè)置其他名稱(在構(gòu)造函數(shù)中使用ToTable(“ Foo”);)或設(shè)置特定的屬性
public class FooViewConfiguration : EntityTypeConfiguration<FooView>
{
public FooViewConfiguration()
{
this.HasKey(t => t.Id);
this.ToTable("myView");
}
}
將FooViewConfiguration文件添加到modelBuilder中,例如,檢查Context的OnModelCreating方法:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new FooViewConfiguration ());
}

TA貢獻(xiàn)1818條經(jīng)驗 獲得超3個贊
這可能是一個更新,但是要首先使用帶有EF Code的視圖,只需將[Table(“ NameOfView”)]添加到類的頂部,所有這些都應(yīng)該正常工作,而不必經(jīng)歷其他所有人正在經(jīng)歷的所有麻煩。同樣,您將不得不將其中一列報告為[key]列。這是我下面的實現(xiàn)示例代碼。
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace SomeProject.Data
{
[Table("SomeView")]
public class SomeView
{
[Key]
public int NameID { get; set; }
public string Name { get; set; }
}
}
這是上下文的樣子
using System.Data.Entity;
namespace SomeProject.Data
{
public class DatabaseContext : DbContext
{
public DbSet<SomeView> SomeViews { get; set; }
}
}

TA貢獻(xiàn)1817條經(jīng)驗 獲得超14個贊
如果您想要的只是一堆非規(guī)范化的對象,那么您可能只是在類中創(chuàng)建了一個公共的get-only IQueryable<TDenormolized>
屬性DbContext
。
在中,get
您將返回Linq結(jié)果,以將反標(biāo)準(zhǔn)化的值投影到反標(biāo)準(zhǔn)化的對象中。這可能比編寫DB View更好,因為您正在編程,而不僅限于使用select
語句。而且它是編譯時類型安全的。
請注意,不要觸發(fā)枚舉之類的ToList()
調(diào)用,因為它們會打斷延遲的查詢,您最終可能會從數(shù)據(jù)庫中獲得一百萬條記錄,并在應(yīng)用程序服務(wù)器上對其進(jìn)行過濾。
我不知道這是否是正確的方法,但我嘗試過并且對我有用。
- 3 回答
- 0 關(guān)注
- 577 瀏覽
添加回答
舉報