我不能在 .NET Portable 中使用 Code First fluent API 吗?
Can't I use Code First fluent API with .NET Portable?
我创建了一个便携式 Class 库,目标 .NETPortable, v4.0
在下面class
public class AddressConfiguration : EntityTypeConfiguration<Address>
{
public AddressConfiguration()
{
ToTable("Addresses");
HasKey(c => c.Id);
}
}
第 HasKey(c => c.Id);
行
visual studio 投诉
The type 'Expression<>' is defined in an assembly that is not referenced.
You must add a reference to assembly 'System.Core, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089'.
我在这里错过了什么?
App.config
是
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
</configuration>
而 packages.config
是
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="EntityFramework" version="6.1.3" targetFramework="portable40-net45+sl5" />
</packages>
这里的错误有点误导。当您仅通过 NuGet 安装 EF 时:
Install-Package EntityFramework
NuGet 会将其报告为已安装:
Adding package 'EntityFramework.6.1.3' to folder '\psf\home\Documents\Visual Studio 2015\Projects\Solution2\packages'
Added package 'EntityFramework.6.1.3' to folder '\psf\home\Documents\Visual Studio 2015\Projects\Solution2\packages'
Added package 'EntityFramework.6.1.3' to 'packages.config'
Executing script file '\psf\home\Documents\Visual Studio 2015\Projects\Solution2\packages\EntityFramework.6.1.3\tools\init.ps1'
Executing script file '\psf\home\Documents\Visual Studio 2015\Projects\Solution2\packages\EntityFramework.6.1.3\tools\install.ps1'
上面的两个脚本会修改你的 proj 文件和 app.config
以及 package.config
文件,但是,不会引用实际的 dll。
如果您检查 packages\EntityFramework.6.1.3\lib
的内容,您会发现两个包含二进制文件的文件夹(net40
和 net45
)。
事实上,EF 根本不支持便携式配置文件。您可能需要考虑使用 EF7。
您可能手动引用了 .NET40
或 .NET45
DLL 之一。现在您遇到了 API 不匹配的问题。
另一种选择是重新考虑应用程序的体系结构。您可以将业务逻辑保留在 PCL 中,使用存储抽象出工作并将抽象注入业务逻辑 class。
您必须将上述抽象的实际实现保留在 .NET 4.5 项目中。
在不知道您的项目的任何细节的情况下,我只能提供这些建议。
我创建了一个便携式 Class 库,目标 .NETPortable, v4.0
在下面class
public class AddressConfiguration : EntityTypeConfiguration<Address>
{
public AddressConfiguration()
{
ToTable("Addresses");
HasKey(c => c.Id);
}
}
第 HasKey(c => c.Id);
行
visual studio 投诉
The type 'Expression<>' is defined in an assembly that is not referenced.
You must add a reference to assembly 'System.Core, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089'.
我在这里错过了什么?
App.config
是
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
</configuration>
而 packages.config
是
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="EntityFramework" version="6.1.3" targetFramework="portable40-net45+sl5" />
</packages>
这里的错误有点误导。当您仅通过 NuGet 安装 EF 时:
Install-Package EntityFramework
NuGet 会将其报告为已安装:
Adding package 'EntityFramework.6.1.3' to folder '\psf\home\Documents\Visual Studio 2015\Projects\Solution2\packages'
Added package 'EntityFramework.6.1.3' to folder '\psf\home\Documents\Visual Studio 2015\Projects\Solution2\packages'
Added package 'EntityFramework.6.1.3' to 'packages.config'
Executing script file '\psf\home\Documents\Visual Studio 2015\Projects\Solution2\packages\EntityFramework.6.1.3\tools\init.ps1'
Executing script file '\psf\home\Documents\Visual Studio 2015\Projects\Solution2\packages\EntityFramework.6.1.3\tools\install.ps1'
上面的两个脚本会修改你的 proj 文件和 app.config
以及 package.config
文件,但是,不会引用实际的 dll。
如果您检查 packages\EntityFramework.6.1.3\lib
的内容,您会发现两个包含二进制文件的文件夹(net40
和 net45
)。
事实上,EF 根本不支持便携式配置文件。您可能需要考虑使用 EF7。
您可能手动引用了 .NET40
或 .NET45
DLL 之一。现在您遇到了 API 不匹配的问题。
另一种选择是重新考虑应用程序的体系结构。您可以将业务逻辑保留在 PCL 中,使用存储抽象出工作并将抽象注入业务逻辑 class。
您必须将上述抽象的实际实现保留在 .NET 4.5 项目中。
在不知道您的项目的任何细节的情况下,我只能提供这些建议。