Mat*_*ett 9 fluent-interface code-first ef-code-first entity-framework-4.1
我有一个相当简单的复合一对多关系,使用POCO/Fluent API定义,其中一列是一个字符串.
我发现我们数据库中这一栏中的数据在案例方面是不一致的,即'abb','ABB' - 这是我们的主要ERP系统,并且由各种来源提供,这些来源主要是我们无法控制的.
这在加入相关表时首先使用EF代码时出现问题,因为当PK/FK的情况不同时,即使SQL Profiler显示正在执行的SQL和返回的结果,EF也会默认忽略该连接.
我正在使用WCF,因此关闭了延迟加载和代理创建,并且急于使用Include加载所需的相关实体.例如.
var member = context.Member.Include(m => m.Audits).First(m => m.Id == id);
Run Code Online (Sandbox Code Playgroud)
除了修改数据库模式之外,还有其他解决方案吗?
嗨,我遇到了同样的问题(虽然不是首先使用代码,而是使用生成的模型)
原因是EF对关键字段进行了区分大小写的比较,并且没有找到相关的对象。
我猜问题出在“EDM 关系经理”上,也许有可能覆盖这种行为。
我找到了一个简单的解决方法:将相关属性小写:
[EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]
[DataMemberAttribute()]
public global::System.String id
{
get
{
return _id.ToLower(); // **<- here**
}
set
{
if (_id != value)
{
OnidChanging(value);
ReportPropertyChanging("id");
_id = StructuralObject.SetValidValue(value, false);
ReportPropertyChanged("id");
OnidChanged();
}
}
}
private global::System.String _id;
partial void OnidChanging(global::System.String value);
partial void OnidChanged();
Run Code Online (Sandbox Code Playgroud)
它确实有效,但是,当然,这是一个蹩脚的解决方法。我会坚持一段时间,直到我(或某人)提出更好的解决方案。
祝你好运!
| 归档时间: |
|
| 查看次数: |
2139 次 |
| 最近记录: |