Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用外部参数的实体框架自定义属性_C#_Wcf_Entity Framework_Partial Classes - Fatal编程技术网

C# 使用外部参数的实体框架自定义属性

C# 使用外部参数的实体框架自定义属性,c#,wcf,entity-framework,partial-classes,C#,Wcf,Entity Framework,Partial Classes,我有一个EDM,用于在DAL项目中恢复“产品”实体的集合。MVC网站项目引用并直接实例化ObjectContext,并将IQueryable返回给网站,用于分页和显示产品 为了简化,这个实体只有“ID”、“Rate”和“Description”属性。我想创建另一个名为“CostPerMonth”的计算属性,它将从名为“LoanAmount”的网站获取输入,同样,为了简单起见,这个“CostPerMonth”属性将由((“LoanAmount”*“Rate”)/12组成 我忍不住觉得这个计算应该在

我有一个EDM,用于在DAL项目中恢复“产品”实体的集合。MVC网站项目引用并直接实例化ObjectContext,并将IQueryable返回给网站,用于分页和显示产品

为了简化,这个实体只有“ID”、“Rate”和“Description”属性。我想创建另一个名为“CostPerMonth”的计算属性,它将从名为“LoanAmount”的网站获取输入,同样,为了简单起见,这个“CostPerMonth”属性将由((“LoanAmount”*“Rate”)/12组成

我忍不住觉得这个计算应该在DAL项目中进行,以使代码更加可重用,因为无论在哪里使用这些数据,都会指定一个“LoanAmount”。我可能的解决方案如下:

  • 为Product创建分部类,将新属性“CostPerMonth”添加到Product。在网站控制器中,当返回数据时,通过迭代返回的数据并进行计算来填充此新列

  • 为Product创建分部类,将新属性“CostPerMonth”添加到Product。在DAL项目中,创建一个helper类,该类有一个接受“LoanAmount”参数并返回列表的方法。这样做的问题是我需要具体化数据以便进行计算。该方法可以接受“Skip”和“Take”参数,该参数可以在用于返回产品的Linq查询中使用

  • 为Product创建分部类,将新属性“CostPerMonth”添加到Product。使用WCF web服务向解决方案添加另一层,在服务方法中执行计算并使用REST将数据返回到MVC网站

如有任何建议,将不胜感激

致以最良好的祝愿


马克

如果我们退后一步,把你在问题中提出的问题分解,那么解释我的答案可能会更容易

  • 我们有一个名为Products的对象/实体
  • 有一个计算字段将是((“贷款金额”*“利率”)/12)
  • CostPerMonth不需要存储在数据库中
因此,此计算字段是产品实体的业务规则。如果您使用的是MVC,那么只有一个地方可以使用这些代码/逻辑,那就是模型

考虑到您使用EF,它将位于一个非映射/计算字段中,给您一个想法的代码将如下所示

   [NotMapped]
    public decimal CostPerMonth
    {
        get { return (LoanAmount * Rate)/12 ; }
    }
关于在各个层中使用支离破碎的业务逻辑的问题,我可以讲上几天

现在,如果您想让其他客户机轻松使用此逻辑,则需要公开一个服务来实现这一点。(您可以使用webAPI/服务堆栈/wcf等)这实际上是另一个基于您的需求的完整问题。但这里的重点是,你的逻辑在一个地方