zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    机器学习:SVM(核函数、高斯核函数RBF)
    机器学习:SVM(非线性数据分类:SVM中使用多项式特征和核函数SVC)
    LeetCode566. Reshape the Matrix
    LeetCode 128. Longest Consecutive Sequence
    # 线程安全 & 线程安全函数 & 线程不安全函数
    Linux进程状态
    C++ 4种强制类型转换
    TCP超时重传、滑动窗口、拥塞控制、快重传和快恢复
    LeetCode 69. Sqrt(x)
    LeetCode543. Diameter of Binary Tree
  • 原文地址:https://www.cnblogs.com/hao-1234-1234/p/12450129.html
Copyright © 2011-2022 走看看