gpt4 book ai didi

entity-framework - Entity Framework 代码优先的 WCF

转载 作者:行者123 更新时间:2023-12-04 08:32:22 25 4
gpt4 key购买 nike

我想在我的 WCF 服务后面使用 EF 来获取数据并将其显示给客户端。我需要以下建议:

  1. 我是否需要为所有 View (例如学生、教师等)提供相同的界面,或者我是否需要为每个表(或 View )提供不同的界面和服务

    <
  2. 我是否需要在我的服务 (.svc) 中生成数据库调用,或者首选其他架构?

    public Student[] GetAllStudents()
    {
    //database generation code here
    }
  3. 如何使用 EF 代码优先方法生成数据库。我知道对于 MVC 应用程序,您需要在 Global.asaxweb.config 中设置初始化程序,但我不确定在这种情况下如何调用它。我的模型如下所示:

    [DataContract]
    public class Student
    {
    [DataMember]
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    [DataMember]
    public string Type { get; set; }
    [DataMember]
    public string Subject { get; set; }
    [DataMember]
    public string Description { get; set; }
    }

最佳答案

你真正应该做的是将你的系统分解成更多独立的层。与其使用直接查询数据库的 WCF 调用,不如创建一个“业务逻辑”层,将 WCF 调用为您提供的信息转换为 EF 调用需要知道的信息。这称为 N-Tier application

public class SchoolAPI : ISchoolAPI
{
private DataAccessLayer _dal = new DataAccessLayer();

public Student[] GetAllStudents()
{
return _dal.GetStudents(null, null);
}

public Student[] GetAllScienceStudents()
{
return _dal.GetStudents(null, DataAccessLayer.ScienceStudentType);
}
}

private class DataAccessLayer
{
public static readonly ScienceStudentType = //...

public Student[] GetStudents(string subject, string type)
{
using(var ctx = new SchoolContext())
{
IQueryable<Student> studentQuery = ctx.Students;

if(subject != null)
studentQuery = studentQuery.Where(s=>s.Subject == subject);

if(type != null)
studentQuery = studentQuery.Where(s=>s.Type == type);

return studentQuery.ToArray();
}
}
}

WCF 调用的调用方不需要知道字符串 ScienceStudentType 是什么,它所关心的只是获取理科生。通过将业务逻辑与数据库调用分开,您的服务的调用者不再需要知道。

对于 EF,它将在框架第一次“接触”数据库时进行初始化,并检测到它不存在(如果已设置)。这是在 SchoolContext 的构造函数中完成的,但对于这个答案来说有点太宽泛了。我建议查找有关 EF 的教程,并让它在没有 WCF 的简单测试环境中工作(可能是一个简单的控制台应用程序,它只调用 GetStudents() 然后进入 WCF 环境。

关于entity-framework - Entity Framework 代码优先的 WCF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24722589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com