- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我遇到了 EF4 和 Proxy Pocos 的问题。
我在同一个程序集中有 2 个同名但不同命名空间的类:
QuoteModels.CashPayment
OrderModels.CashPayment
这编译正常,但在运行时 EF 抛出以下异常:
Schema specified is not valid. Errors: \r\nThe mapping of CLR type to EDM type is ambiguous because multiple CLR types match the EDM type 'CashPayment'. Previously found CLR type 'QuoteModels.CashPayment', newly found CLR type 'OrderModels.CashPayment'
是否有一种变通方法可以让具有不同命名空间的同一程序集中具有相同名称的类与 Ef4 一起使用?
我是否必须给它们不同的名称或将它们移动到另一个程序集中?
最佳答案
我找到了解决方法。这是一个非常明显的非理想解决方法,但我认为在 EF5 出来解决这个问题之前,我认为它对我们来说已经足够好了。
简短回答:只需重命名一个或两个不明确的实体,例如:2x Person
重命名为:Personal_Person
和 Work_Person
基于 PersonalContext
和 WorkContext
。
长答案:在我们的场景中,我们使用的是数据库优先的方法(我们正在重写旧版应用程序,对数据库的更改最少)。我们的数据库包含数百个表,因此我没有使用单个 EDMX/上下文,而是使用多个 EDMX/上下文(每次我尝试添加超过一半的表时,EDMX 都会发出声音)。但是,有些表需要存在于多个 EDMX/Context 中。
为了便于讨论,我们假设我们有一个包含以下表格的简单数据库:
人
家庭
关系
地址
商业
员工
此外,为了便于讨论,我们假设存在于多个上下文中的任何表都会导致此问题(正如我在对 Devart 的回答的评论中所述,这不是真的,我不明白为什么它有时会起作用).
现在假设我们要创建两个上下文:
个人上下文
:
人
家庭
关系
地址
工作环境
:
人
商业
地址
员工
在这种情况下,Person
和Address
都会导致我们的问题。因此,我们将在 EDMX 映射中做的只是将我们的实体重命名为 Personal_Person
/Work_Person
和 Personal_Address
/Work_Address
.
如前所述,这是一个非常明显的非理想解决方法,但由于 EF 不考虑命名空间并严格按照名称(不是真实身份,只是名称)进行操作,因此一种选择是将你的名字里面的命名空间。
现在我仍在争论是否要这样做,或者为每个实体命名空间名称(Personal_Person
、Personal_Family
、Personal_Relationship
、Personal_Address
和 Work_Person
、Work_Business
、Work_Address
和 Work_Employee
) 对于一致性和 Intellisense 友好性(保持所有实体按正确的字母顺序排列)因为实际上,命名空间属于名称之前而不是之后,但这是一个判断调用,对于提供问题的解决方案并不重要。
希望对您有所帮助!!
关于c# - EF4 Poco 问题映射类型相同的名称相同的程序集不同的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3354137/
C#内部访问修饰符的定义是内部:只能在包含程序集或友元程序集内访问。所以我的问题是什么是 C# 程序集?在包含程序集或 friend 程序集之内是什么意思?它是否意味着在同一个命名空间或项目中? 最佳
任何人都可以回答以下问题。我正在使用 c# 语言。 我可以将程序集调用为 .ddl 或 .exe 文件吗? 我可以将 Assembly Manifest 称为程序集吗? 程序集、元数据和程序集 lis
我正在从 Python 运行一个 .NET COM 程序集,只有当我将程序集 dll 和依赖项复制到我的 Python 根路径 c:\Python27 时才能使它正常工作。 这是不整洁的,所以我想将
作为世界上任何一名程序员,他/她一生中至少有一次,我正在尝试创建我的“革命性”,新的且唯一的操作系统。 :D 好吧,我正在使用虚拟模拟器(Oracle VM Virtual Box),为此我创建了一个
我创建了以下程序来读取 5 个数字,然后 dumpreg查看输入的数字... INCLUDE Irvine32.inc .data count = 5 scor
如何在保护模式下执行 IN 和 OUT 等受限指令? 我发现它需要足够高的特权级别(CPL)才能执行 IO 指令。我怎样才能在内核模式下运行,拥有 IO 权限或任何其他可能对我有帮助的东西? - 我希
目录 C# 程序集、模块和类型概念及关系 概述 程序集 模块 类型 程序集、模块和类型的关系 总结 引用
构建 maven assembly ,我留下了这样的东西: ${project.basedir} / LICENS
我的应用程序由几个核心程序集和几个扩展/插件程序集组成。为了让 MEF 知道插件必须提供的所有部件,即使我永远不会使用它们的任何部件,我也必须加载这些程序集。这使得应用程序需要更多时间来启动(如果我要
我对我们的构建基础结构有一个非常具体的要求,即将另一个 JAR 依赖项的一些内容复制到我的 Web 应用程序的特定子文件夹中。我们正在使用 maven-assembly-plugin,一个自然的方法是
为什么下面的指令会设置符号标志? mov al,0FEh sub al,2 据我了解,AL寄存器可以保存2^8 - 1或255。0FEh = 254(十进制)。减去 2 叶 252。这似乎是正数。 (
我以前使用过 NUnit,但已经有一段时间了,而且从来没有在这台机器上使用过。我在 Program Files 下解压了 2.4.8 版本,并且在尝试加载测试时不断收到此错误。 Could not l
我说的是一个使用 C# 进行游戏编程的小型游戏引擎。所以,我有一个嵌入单声道运行时的 C++ 应用程序(我称之为“启动器”)。我有一个用 C# 编写的程序集,它是我的游戏引擎类库。启动器按照 Embe
我对汇编相当陌生,并尝试从标准输入读取值(从 C 调用 scanf 函数)并将其打印回标准输出(使用 printf)。 .text readstr: .asciz "%d" #strin
谢谢帮助,我的问题是关于从下面的代码中收到的 ax 值? mov al,22h mov cl,0fdh imul cl 真机结果:ff9a 我的预期:00:9a(通过二进制相乘) 第一个数字是 22h
我正在开发一个汇编程序,该程序将整个文本文件读入缓冲区,然后将其显示在控制台中。它立即显示 24 行(每行的最大长度为 80,因为我使用 80 宽 * 25 高的 dossbox )然后等待用户输入,
我正在使用一个简单的程序集片段,使用 BIOS 作为引导加载程序的一部分将字符打印到屏幕上。这是引导加载程序代码。 [org 0x7c00] [bits 16] %include "a20_check
我只是想知道这段代码是什么意思: XOR EAX,EBX XOR EBX,EAX XOR EAX,EBX 最佳答案 那是 xor swapping . 在寄存器上执行它不会遇到常见的难看的失败案例。
我在新电脑上的 XNA 项目开始出现奇怪的错误。我有两个关于解决方案的项目和一个由它们使用的库。其中一个项目,一个 XNA 游戏项目,运行完美。另一个项目是 WindowsForm 和 XNA 的混合
是的,我正在努力实现类似的目标 __asm__(jmp label;); 其中 label 应替换为内存中保存的字符串值(结构体的字段)。 有没有办法做到这一点(或类似的方法可以让我跳转到运行时确定的
我是一名优秀的程序员,十分优秀!