Je vůbec možné přidat pohled do modelu Entity bez jedinečného identifikátoru?
Pokud bez primárního klíče, ne. To bude mít za následek tento druh chyby:
Během generování modelu byla zjištěna jedna nebo více chyb ověření:
System.Data.Edm.EdmEntityType::EntityType „SalesOnEachCountry“ nemá definován žádný klíč. Definujte klíč pro tento EntityType.System.Data.Edm.EdmEntitySet:EntityType:EntitySetSalesOnEachCountryList je založen na typu SalesOnEachCountry, který nemá definované žádné klíče.
Pokud bez jedinečného identifikátoru, ano, i když má nežádoucí výstup. Záznamy se stejným identifikátorem by odkazovaly na stejný objekt, tomu se říká Identity Map Pattern
Příklad, i když váš pohled vytváří tyto dva řádky:
Country Year TotalSales
Philippines 2010 20.000000
Philippines 2011 40.000000
Pokud budete pouze mapovat primární klíč pouze na pole Země, např.
public class SalesOnEachCountry
{
[Key]
public int CountryId { get; set; }
public string CountryName { get; set; }
public int OrYear { get; set; }
public long SalesCount { get; set; }
public decimal TotalSales { get; set; }
}
, i když váš pohled vytváří v editoru dotazů Oracle dva výše uvedené řádky, Entity Framework vytváří tento nesprávný výstup:
Country Year TotalSales
Philippines 2010 20.000000
Philippines 2010 20.000000
Entity Framework bude mít za to, že druhý řádek je stejný objekt jako první řádek.
Aby byla zaručena jedinečnost, musíte určit, které sloupce činí každý řádek jedinečným. Ve výše uvedeném příkladu musí být zahrnut rok, takže primární klíč je jedinečný. tj.
public class SalesOnEachCountry
{
[Key, Column(Order=0)] public int CountryId { get; set; }
public string CountryName { get; set; }
[Key, Column(Order=1)] public int OrYear { get; set; }
public long SalesCount { get; set; }
public decimal TotalSales { get; set; }
}
Díky tomu, že váš primární klíč bude podobný výše uvedeným atributům, dokáže Entity Framework správně namapovat řádek každého zobrazení na jejich vlastní objekty. Entity Framework tedy nyní může zobrazovat přesně stejné řádky, jaké má vaše zobrazení.
Country Year TotalSales
Philippines 2010 20.000000
Philippines 2011 40.000000
Kompletní podrobnosti zde:http://www.ienablemuch.com/2011/06/mapping-class-to-database-view-with.html
Pokud jde o vaše pohledy, které nemají žádné sloupce, aby byl řádek jedinečný, nejjednodušší způsob, jak zaručit, že Entity Framework dokáže namapovat každý řádek vašeho pohledu na jejich vlastní objekty, je vytvořit samostatný sloupec pro primární klíč
create view RowNumberedView as
select
row_number() over(order by <columns of your view sorting>) as RN
, *
from your_existing_view
Poté přiřaďte [Key]
atribut ve vlastnosti RN vaší class RowNumberedView