没有定义主键并且无法推断出有效的主键

Jen*_*3Me 4 sql-server asp.net-mvc-4

我在制作视图时有此查询,但问题是此视图未包含在我的模型中。所以,我不能使用这个视图。

这是我的代码:

CREATE VIEW [dbo].[Payment_Transaction_vw]
AS 
    SELECT 
        id = ROW_NUMBER() OVER (ORDER BY (SELECT NULL)),
        Transaction_Info.trans_name, Student_Info.ID_Number,
        Student_Info.student_fname, Student_Info.student_lname,
        SUM(Payment_Transaction.amount) AS amount
    FROM 
        [Payment_Transaction]
    INNER JOIN 
        Student_Info ON Payment_Transaction.student_info_id = Student_Info.student_info_id 
    INNER JOIN 
        Transaction_Info ON Payment_Transaction.trans_info_id = Transaction_Info.trans_info_id 
    GROUP BY 
        ID_Number, student_lname, student_fname, trans_name;
Run Code Online (Sandbox Code Playgroud)

创建此视图后,可以在数据库中看到此视图。但当我添加模型时不会。这不包括在我的实体中。

这是将显示的错误:

dbo.Payment_Transaction_vw 没有定义主键,无法推断出有效的主键。此表/视图已被排除。要使用该实体,您需要查看我们的架构,添加正确的键并取消注释。

请帮我解决这个问题。提前致谢。

Mac*_*kan 6

我认为这可能是因为 EF 很难选择正确的主键。强制 EF 选择您喜欢的键的一种方法似乎是ISNULL()用于主键和NULLIF()其他列(至少是那些可能导致混淆的列,例如来自其他表的主键或不可为空的列)。

在您的情况下,这意味着:

SELECT 
    ISNULL(ROW_NUMBER() OVER(ORDER BY (SELECT NULL)), -1) AS Id,
    NULLIF(Transaction_Info.trans_name,'') AS trans_name, 
    NULLIF(Student_Info.ID_Number,-1) AS ID_Number,
    NULLIF(Student_Info.student_fname,'') AS student_fname, 
    NULLIF(Student_Info.student_lname,'') AS student_lname,
    NULLIF(SUM(Payment_Transaction.amount),-1) AS amount
FROM [Payment_Transaction]
INNER JOIN Student_Info ON 
    Payment_Transaction.student_info_id = Student_Info.student_info_id 
INNER JOIN Transaction_Info ON 
    Payment_Transaction.trans_info_id = Transaction_Info.trans_info_id 
GROUP BY ID_Number, student_lname, student_fname, trans_name;
Run Code Online (Sandbox Code Playgroud)

您可能不需要所有这些NULLIF(),但由于我不确定是哪个列导致了问题,因此最好全部使用。如果它适用于此代码,您可以开始从学生姓名trans_name 中删除 NULLIF 。