我在查看时遇到此问题,但问题是此视图未包含在我的模型中。所以,我无法使用这种观点。
这是我的代码:
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没有定义主键,也无法推断出有效的主键。此表/视图已被排除。要使用该实体,您需要查看我们的架构,添加正确的密钥并取消注释。
请帮我解决这个问题。提前谢谢。
答案 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在您将其与模型一起使用时不允许这样做