Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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#_.net_Entity Framework - Fatal编程技术网

可以将动态添加到c#类的属性与实体框架一起使用吗?

可以将动态添加到c#类的属性与实体框架一起使用吗?,c#,.net,entity-framework,C#,.net,Entity Framework,这个答案描述了一种在运行时通过创建要向其添加属性的类的基类向类“添加”属性的方法。 那么,是否有可能将这个通过反射创建的类映射到实体框架中的表或视图(最有可能在OnModelBuilding方法中) 在人们说“这是一个愚蠢的想法”之前,让我告诉大家我正在努力实现什么。我们有一个与多个DBMS平台兼容的数据提供程序,并使用EF作为实现此兼容性的单一代码路径。我们需要能够使用实体框架映射到数据库中的视图,以执行过滤等操作 这很容易,EF可以毫不费力地完成这些事情。这就是问题所在。我们需要能够将自定

这个答案描述了一种在运行时通过创建要向其添加属性的类的基类向类“添加”属性的方法。

那么,是否有可能将这个通过反射创建的类映射到实体框架中的表或视图(最有可能在OnModelBuilding方法中)

在人们说“这是一个愚蠢的想法”之前,让我告诉大家我正在努力实现什么。我们有一个与多个DBMS平台兼容的数据提供程序,并使用EF作为实现此兼容性的单一代码路径。我们需要能够使用实体框架映射到数据库中的视图,以执行过滤等操作

这很容易,EF可以毫不费力地完成这些事情。这就是问题所在。我们需要能够将自定义列加入到该视图中,并能够对这些自定义列进行搜索、排序、筛选等

我立刻想到,drat,EF不能这样做,所以我让查询这个视图的方法只访问下面的vanilla ADO.NET提供程序,并用平台无关的SQL编写了近1000行代码

以下是我认为需要解决的问题,以使Entity Framework的运行时配置正常工作:

  • 使EF模型生成器映射到运行时生成的已发出类
  • 以某种方式使用反射来创建表达式,该表达式可用于传递到IQueryable扩展方法中
  • 假设EF将使用这些表达式并实际生成所需的SQL

  • EF代码存在于我们的核心产品中,一旦部署就无法重新编译,因此我尝试在运行时完成这一切。

    我们需要能够将自定义列加入到该视图中,并能够对这些自定义列进行搜索、排序、筛选等。您确定EF帮不上忙吗?这取决于自定义列的来源,您可以使用Linq To实体将它们全部连接起来,进行投影、筛选、排序等。。。顺便说一句,如果您想向结果中添加自定义列,那么对于只读视图来说,一个匿名对象就足够了。如果您想要某种可编辑的结果,那么应该创建一个新视图(并且您只需要映射该视图的存储过程)。@如果我们有一个具有ColumnA、ColumnB、ColumnC的视图,那就没有希望了。我有一个POCO实体类,它分别具有a、B和C的属性。这很有效。但是现在客户将ColumnD添加到视图中,他们希望能够搜索筛选器等。我的POCO实体类中没有ColumnD属性(除非我将其添加并重新编译,在本例中我无法这样做),那么
    ColumnD
    在您的模型中是否有任何关系?它应该至少有一个。
    列d
    只是我们希望在其他地方的网页中显示的附加列。我需要在
    ColumnD
    上搜索、排序和过滤的功能,尽管我不知道它被称为“ColumnD”,因为它是一个自定义列,通过在下面的DBMS中修改它来添加到视图中。所以-没有映射到EF实体的关系动态SQL?