7

我正在使用 VS 2010、MVC3 和 EF 5 在网站中开发联系人日志——实体首先使用代码创建。数据存储在一组 SQL Server 2008 R2 数据库中。我想显示联系日志的摘要并创建了一个视图。

CREATE VIEW dbo.ContactLogSummaries

AS

SELECT
    CLE.ContactLogEntryID,
    CLE.CaseID,
    'Test' AS ContactName,
    EU.UserName As OfficeUser,
    CLE.DateAndTimeOfContact,
    CLC.Category,
    CLE.ContactDetails

FROM
    ContactLogEntries AS CLE
    JOIN
    ContactLogCategories AS CLC
    ON CLE.ContactLogCategoryID = CLC.ContactLogCategoryID
    JOIN
    Control.dbo.EndUsers AS EU
    ON CLE.UserID = EU.EnduserID

Contact Log 数据库中有两个实体 (ContactLogEntriesContactLogCategories),Control.dbo.EndUsers另一个数据库中有一个数据库第一个实体。联系日志可能包含大量记录。我希望能够只显示特定案例的记录。

我的问题分为两部分:

  1. 能否直接使用SQL视图在网页上显示摘要(可能通过读入类)
  2. 我可以创建一个等效于 SQL 视图的代码优先对象吗?
4

2 回答 2

23

您可以使用 TableAttribute(数据注释)或流利映射中的 ToTable 将实体直接映射到视图...

例如使用数据注释:

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

public namespace whatever.mynamespace

    [Table("dbo.ContactLogSummaries")] //<-- this is your view
    public class ContactLogSummary
    {
        ...
    }
}
于 2014-04-14T23:29:47.387 回答
9

找到问题1的简单解决方案:

public class ContactLogSummary
{
    public int ContactLogEntryID { get; set; }
    public int MaternalCaseID { get; set; }
    public String ContactName { get; set; }
    public String OfficeUser { get; set; }
    public DateTime DateAndTimeOfContact { get; set; }
    public String Category { get; set; }
    public String ContactDetails { get; set; }

    public static List<ContactLogSummary> LoadContactListSummary
                                             (int caseID, String connectionString);
    {
        MyDataContext dbContext = new MyDataContext(connectionString);
        return dbContext.Database.SqlQuery<ContactLogSummary>
               ("SELECT * FROM dbo.ContactLogSummaries WHERE MaternalCaseID = @CaseID ORDER BY ContactLogEntryID DESC",
                                     new SqlParameter("CaseID", caseID)).ToList();
    }

它完成了所有需要的工作,尽管我对问题 2 的答案感兴趣,但我有一个可行的解决方案。

于 2013-09-04T08:19:30.143 回答