Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.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# 同一edmx中的EF4自定义实体_C#_Entity Framework 4 - Fatal编程技术网

C# 同一edmx中的EF4自定义实体

C# 同一edmx中的EF4自定义实体,c#,entity-framework-4,C#,Entity Framework 4,我有一个edmx文件,它100%反映了我的DB模式。 除此之外,我还需要基于现有实体创建一些自定义实体,非常类似于将多个实体的字段聚合为单个实体的视图 问题是这不太管用。我尝试了几种方法,但它总是让我与edmx上已经存在的实际实体发生冲突 我需要那些反映我的DB模式的实体,所以我必须创建另一个edmx文件来保存我的自定义实体并避免合并吗 我还想到: 创建存储过程,但如果 我需要过滤SP结果I eather必须增加对serach的支持 在SP上获取所有行和 使用LINQ2对象筛选。。。不行 这个

我有一个edmx文件,它100%反映了我的DB模式。 除此之外,我还需要基于现有实体创建一些自定义实体,非常类似于将多个实体的字段聚合为单个实体的视图

问题是这不太管用。我尝试了几种方法,但它总是让我与edmx上已经存在的实际实体发生冲突

我需要那些反映我的DB模式的实体,所以我必须创建另一个edmx文件来保存我的自定义实体并避免合并吗

我还想到:

  • 创建存储过程,但如果 我需要过滤SP结果I eather必须增加对serach的支持 在SP上获取所有行和 使用LINQ2对象筛选。。。不行 这个
  • 创建一个视图,这个视图将 工作不错,但我想试试 为此,请使用EF4 设计师和保持一切在一个 地点

有人能给我举一些例子吗?

我认为你所描述的是一种观点,所以这可能是正确的方法

可以使用DefiningQuery节点将视图代码存储在edmx中。您不需要在数据库中创建视图。但是,此功能不受设计器支持,您需要手动编辑edmx。如果使用设计器从数据库刷新edmx,则应保留所做的更改

详情如下:

只需在数据库中创建视图,并让设计者查找和建模视图,就更容易了


此实体将是只读的,但如果您希望通过此视图支持修改,当然可以为更新/插入/删除分配SP。

我认为您描述的是一个视图,因此这可能是正确的方法

可以使用DefiningQuery节点将视图代码存储在edmx中。您不需要在数据库中创建视图。但是,此功能不受设计器支持,您需要手动编辑edmx。如果使用设计器从数据库刷新edmx,则应保留所做的更改

详情如下:

只需在数据库中创建视图,并让设计者查找和建模视图,就更容易了


此实体将是只读的,但是如果您希望通过此视图支持修改,当然可以为更新/插入/删除分配SP。

除了特殊情况(表拆分、层次结构映射)外,您不能基于同一个表定义两个实体。在这种情况下,您必须使用DefiningQuery作为@James建议的或。区别在于DefiningQuery是在存储模型中定义的,它是常见的SQL。QueryView是在概念模型中定义的,它是在现有实体之上定义的ESQL。QueryView只支持ESQL的一些特性(例如,它不支持聚合函数)。在这两种情况下,您都必须直接修改EDMX(XML),设计器不支持这些功能

如果您不想使用这些高级EF功能,@James提到的数据库视图也是一个选项。您还可以简单地公开对象上下文上的预定义查询,并将返回投影映射到自定义类型


请注意,这两种方法都不允许您修改、插入或删除数据。

除了特殊情况(表拆分、层次结构映射)外,您不能基于同一个表定义两个实体。在这种情况下,您必须使用DefiningQuery作为@James建议的或。区别在于DefiningQuery是在存储模型中定义的,它是常见的SQL。QueryView是在概念模型中定义的,它是在现有实体之上定义的ESQL。QueryView只支持ESQL的一些特性(例如,它不支持聚合函数)。在这两种情况下,您都必须直接修改EDMX(XML),设计器不支持这些功能

如果您不想使用这些高级EF功能,@James提到的数据库视图也是一个选项。您还可以简单地公开对象上下文上的预定义查询,并将返回投影映射到自定义类型


请注意,这两种方法都不允许您修改、插入或删除数据。

+1用于直接在数据库中创建视图。为什么不利用已经存在的东西呢?是的,就像我上面说的,创建一个视图是我唯一的选择,但我认为EF4支持这种需求,我遗漏了一些东西。我不喜欢改变edmx的胆量。。。就是那种在你最意想不到的时候会吹到你手上的东西。哈哈。。设计师正在把我们变成懒惰的程序员。这只是一点xml。仅仅使用设计器并不能获得EF的所有功能,而且设计器中有一些bug在任何情况下都可能爆发。全面了解xml更好。上面有一些非常好的模式文档(请参见此处链接的CDSL规范等-+1),用于直接在数据库中创建视图。为什么不利用已经存在的东西呢?是的,就像我上面说的,创建一个视图是我唯一的选择,但我认为EF4支持这种需求,我遗漏了一些东西。我不喜欢改变edmx的胆量。。。就是那种在你最意想不到的时候会吹到你手上的东西。哈哈。。设计师正在把我们变成懒惰的程序员。这只是一点xml。仅仅使用设计器并不能获得EF的所有功能,而且设计器中有一些bug在任何情况下都可能爆发。全面了解xml更好。上面有一些非常好的模式文档(参见此处链接的CDSL规范等-)