sqlserver某個視圖無法生成EF實體模型edmx

 

根本原因:EF無法將可空值字段推斷爲主鍵。

EF 無法推斷出主鍵,因爲推斷的主鍵字段,在視圖中都爲null,而EF無法將可空值字段推斷爲主鍵。

解決方案:

sqlservr中使用ISNULL字段,讓主鍵字段必須不爲空;

案例:

1利用已有唯一鍵

ISNULL(T_Habitat.PointBatchID,'0000') 

ISNULL(LEFT(dbo.T_Habitat.PointBatchID,4),'0000') 

2、自己創建唯一鍵

ISNULL(newid(), '00000000-0000-0000-0000-000000000000')as ID,

結果:

 

 

 

 

 

 

思路來源:

1 、https://bbs.csdn.net/topics/391921659

 有句話:我自己已經解決了,我通過打開XML編輯器打開了之後,看到沒有生成一張表被註釋了,然後按照註釋修改了。

<!--生成過程中發現錯誤:
警告 6002: 表/視圖“WaterEco.dbo.V_HabitAverage”未定義主鍵。已推斷出該鍵,並將定義創建爲只讀的表/視圖。-->
<EntityType Name="V_HabitAverage">
<Property Name="PointBatchIDLeft" Type="nvarchar" MaxLength="4" Nullable="false" />
<Property Name="ID" Type="uniqueidentifier" />
</EntityType>
-->

修改視圖後,生成的XML是:

<!--生成過程中發現錯誤:
警告 6002: 表/視圖“WaterEco.dbo.V_HabitAverage”未定義主鍵。已推斷出該鍵,並將定義創建爲只讀的表/視圖。-->
<EntityType Name="V_HabitAverage">
<Key>
<PropertyRef Name="PointBatchIDLeft" />
</Key>
<Property Name="PointBatchIDLeft" Type="nvarchar" MaxLength="4" Nullable="false" />
<Property Name="ID" Type="uniqueidentifier" />
</EntityType>

 

你也可以直接修改XML來改正這個錯誤,當時這可能導致數據庫與數據模型不一致,

下次如果數據庫視圖又有改動,更新視圖時可能還會報錯,因爲生成的XML被覆蓋了。

所以建議修改數據庫視圖。

2、https://bbs.csdn.net/topics/390911105

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章