字符串PK/FK关系的实体框架代码首次大小写敏感性

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)

除了修改数据库模式之外,还有其他解决方案吗?

Jer*_*gas 2

EF 不敏感连接比较

嗨,我遇到了同样的问题(虽然不是首先使用代码,而是使用生成的模型)

原因是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)

它确实有效,但是,当然,这是一个蹩脚的解决方法。我会坚持一段时间,直到我(或某人)提出更好的解决方案。

祝你好运!