没有定义主键,也无法推断出有效的主键

时间:2015-07-07 10:47:51

标签: 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;

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

以下是错误:

  

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

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

2 个答案:

答案 0 :(得分:4)

我认为可能是因为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;

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

答案 1 :(得分:0)

您需要定义第一个id列主键mvc在您将其与模型一起使用时不允许这样做

相关问题