EF6.1升级问题:到SQL Server CE文件位置和[NotMapped]属性

时间:2015-02-06 03:50:48

标签: linq entity-framework sql-server-ce

我真的很感激任何人都能提供的见解。

我回到了使用EF6.0 rc预览的项目。在将项目EF更新到6.1并更新SQL Server CE后,我遇到了两个问题。

[UPDATE] 问题1& 2解决问题3不是

问题3 - 现在通过连接字符串设置路径,如上所述,通过包管理器调用的迁移不能作为无效路径。任何人的想法?

当我启动调试过程时,我遇到问题1并且异常崩溃;但它确实会创建一个.sdf文件,尽管位置错误,如问题2中所述。

1。没有映射的属性和LINQ ERROR不支持

在初始创建过程中,我得到一个异常

List<Equipment> duplicateTags = db.EquipmentReg
                .GroupBy(e => e.TagAndLocation)
                .Where(g => g.Count() > 1)
                .SelectMany(g => g).ToList<Equipment>();

该例外与TagAndLocation有关。 TagAndLocation在模型中由

定义
/// <summary>
/// Creates concatenation object that will not be mapped in the database but will be in the
/// Object Relational Mapping (ORM) of the EF model.
/// </summary>
[NotMapped]
public string TagAndLocation { get { return Tag + " (" + Location.Name + ")"; } }
  

类型&#39; System.NotSupportedException&#39;的第一次机会异常。发生在EntityFramework.dll中   附加信息:指定的类型成员&#39; TagAndLocation&#39;是   LINQ to Entities不支持。只有初始化者,实体成员,   支持实体导航属性。

为什么现在发生这种情况?

2。连接线不适用位置

我的连接不再正确应用路径。

我让它由一个自动运行的DbConfiguration类完成,我想由于它继承了类类型。如下图所示

class HAIDbJob_EFConfiguration : DbConfiguration
{
    public HAIDbJob_EFConfiguration()
    {
        SetProviderServices(SqlCeProviderServices.ProviderInvariantName, SqlCeProviderServices.Instance);

        // Create the connection string programmatically - Setting the filename and path.
        SetDefaultConnectionFactory(new System.Data.Entity.Infrastructure.SqlCeConnectionFactory(
                "System.Data.SqlServerCe.4.0",
                System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Databases"),
                @"Data Source=" + System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Databases") +
                @"\Hazardous_Area_Database_Job.sdf"));
    }
}

不是在运行时位置...\bin\Debug\Databases\Hazardous_Area_Database_Job.sdf中创建文件,而是在其中创建文件 ..\bin\Debug\HA_Inspector.HAI_Database.HAI_Job_EF_Model.Hazardous_Area_Database_Job.sdf

这是数据库模型的完整命名空间...我已经尝试了一些解决方案,为其他人提供了性质略有不同的问题,但没有一个有效。任何想法都会非常感激。

2 个答案:

答案 0 :(得分:0)

1:EF提供程序尝试将TagAndLocation转换为SQL并失败。您必须使用LINQ to Objects进行此分组。

2:为什么不在app.config中有一个命名的连接字符串,或者在DbContext构造函数中传递它。

答案 1 :(得分:0)

解决方案1 ​​ 我在group by语句中进行了字符串比较,因为location有一个字符串成员Location.Name。

解决方案2 当我最初写这篇文章时,我想一直动态命名数据库,这就是我编写初始化类的原因。 为了解决这个问题,我只是按照Erik的建议,在app.config中输入一个XAML连接字符串,使用&#34; Source =。/ Databases&#34; .....来获取子文件夹。