我尝试update-database在 PMC 中执行命令,但总是收到此错误消息。我知道另一篇文章基本上有相同的错误,但我尝试了每个答案,但没有任何效果。
System.ArgumentNullException: Value cannot be null.
Parameter name: type
at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
at System.Activator.CreateInstance(Type type, Object[] args)
at System.Data.Entity.Migrations.Extensions.ProjectExtensions.GetProjectTypes(Project project, Int32 shellVersion)
at System.Data.Entity.Migrations.Extensions.ProjectExtensions.IsWebSiteProject(Project project)
at System.Data.Entity.Migrations.Extensions.ProjectExtensions.GetTargetDir(Project project)
at System.Data.Entity.Migrations.MigrationsDomainCommand.GetFacade(String configurationTypeName, Boolean useContextWorkingDirectory)
at System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()
at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
Value cannot be null.
Parameter name: type
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我正在使用 VS2022 预览版。
我正在尝试使用Entity Framework Code First在表中创建'time(7)'列.这是我的实体:
public class ShiftDetail
{
public long Id { get; set; }
[Required]
public int DayOfWeek { get; set; }
[Required]
[Column(TypeName="time")]
public DateTime StartTime { get; set; }
[Required]
[Column(TypeName = "time")]
public DateTime EndTime { get; set; }
public long ShiftId { get; set; }
public virtual Shift Shift { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在尝试将StartTime和EndTime列的数据库类型设置为"time",但是我收到此错误:
(112,12):错误2019:指定的成员映射无效.类型'ShiftDetail'中成员'StartTime'的类型'Edm.DateTime [Nullable = False,DefaultValue =,Precision =]'与'SqlServer.time [Nullable = False,DefaultValue =,Precision = 7]'不兼容'CodeFirstDatabaseSchema.ShiftDetail'类型中的成员'StartTime'.
我也试过TypeName ="time(7)"但我得到了另一个错误:
(104,6):错误0040:类型时间(7)未使用命名空间或别名限定.只有原始类型可以无限制地使用.
如何创建包含代码的时间列?(最好没有流畅的API)
提前致谢.
.net entity-framework code-first entity-framework-4 ef-code-first
我有以下模型
public class FilanthropyEvent : EntityBase, IDeleteable
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime EventDate { get; set; }
public string Description { get; set; }
public decimal Target { get; set; }
public decimal EntryFee { get; set; }
public bool Deleted { get; set; }
public ICollection<EventAttendee> EventAttendees { get; set; }
}
public class Attendee : EntityBase, IDeleteable
{
public int Id { get; set; }
public …Run Code Online (Sandbox Code Playgroud) 我首先使用EF Code和数据库第一种方法."使用Database.SetInitializer(null);"
我的表有两列createddate和amendddate.它们由SQL Server使用触发器管理.我们的想法是,当数据输入发生时,这些列通过触发器获取数据.
现在我想做的是从EF Code的第一个角度来看这个只读.即我希望能够从我的应用程序中看到创建日期和已记录的日期,但我不想修改这些数据.
我尝试在setter上使用私有修饰符,但没有运气.当我尝试向表中添加新数据时,它试图将DateTime.Max日期输入到数据库,该数据库从SQL服务器抛出错误.
任何的想法?
我发现的所有示例都引用了一个名为ObjectContext的类,它似乎不存在于CTP5中.我必须强调,CTP5是我第一次接触实体框架.
我有一个已连接到我的DbContext的断开连接的POCO.SaveChanges不会接受更改,我如何告诉我的上下文更新该实体?
_context.Users.Attach(user);
// The user has been replaced.
_context.SaveChanges();
// The change is not saved.
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
更新12/01/2011
对于大多数人来说可能是显而易见的,但作为EF的第一次使用者,我没有想到附加已经附加的对象会清除之前的状态.这给我带来了很多痛苦.但是我想以一种非常通用的方式使用Repository模式,这种方式不关心对象是否已经附加或者是作为ASP.NET MVC绑定的结果而新创建的.所以我需要一种UpdateUser方法,我在下面附上了它.
public User UpdateUser(User user) {
if (_context.Entry(user).State == EntityState.Detached) {
_context.Users.Attach(user);
_context.Entry(user).State = EntityState.Modified;
}
return user;
}
Run Code Online (Sandbox Code Playgroud)
该方法显然假设对象以某种方式存在于数据存储中,UpdateUser毕竟它被称为.如果对象已经附加,您将受益于对象的先前状态,这反过来将允许对数据库进行优化更新.但是,如果未附加对象,则该方法会强制整个对象变脏.
现在似乎很明显,不是之前.希望它可以帮助某人.
丰富
我正在尝试使用Oracle.ManagedDataAccess 6.121.1.0提供程序实现代码First Migrations,但根本没有成功.
当我收到ORA代码时,我假设连接已成功打开.但是迁移失败了,因为可能提供者表现为SQL Server而不是Oracle.我认为这是因为它使用'dbo'作为默认架构.
这是我的web.config设置:
<configuration>
<configSections>
<section name="entityFramework"
type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
requirePermission="false" />
<section name="Oracle.ManagedDataAccess.Client"
type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</configSections>
<entityFramework>
<contexts>
<context type="MyProject.Context.MainContext, MyProject.Context">
<databaseInitializer type="MyProject.Context.Config.ContextInitializer, MyProject.Context" />
</context>
</contexts>
<defaultConnectionFactory type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess" />
<providers>
<provider invariantName="Oracle.ManagedDataAccess.Client"
type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="Oracle.ManagedDataAccess.Client" />
<add name="ODP.NET, Managed Driver"
invariant="Oracle.ManagedDataAccess.Client"
description="Oracle Data Provider for .NET, Managed Driver"
type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</DbProviderFactories>
</system.data>
<connectionStrings>
<add name="MainContext" …Run Code Online (Sandbox Code Playgroud) 我基于现有数据库创建了一个实体框架模型,然后从模型中生成了POCO实体.我的web.config中的连接字符串不是实体框架,它只是标准连接字符串(它缺少CSDL,SSDL,MSL引用).
我可以编译我的应用程序,但是当我运行时,我收到此错误:
如果在Code First模式下使用,使用T4模板为Database First和Model First开发生成的代码可能无法正常工作.要继续使用Database First或Model First,请确保在执行应用程序的配置文件中指定了Entity Framework连接字符串.要使用从Database First或Model First生成的这些类,使用Code First添加任何其他配置,使用属性或DbModelBuilder API,然后删除引发此异常的代码
我的问题是,在我的代码中,它实现了POCO来自自动生成,我怎样才能让它像Code First一样?我不想在我的连接字符串中引用CSDL等.
c# entity-framework code-first entity-framework-4.1 database-first
我正在尝试将图像存储/保存在SQL Compact Edition(CE)数据库中.
我将学生模型中的字段声明为:
[Column(TypeName = "image")]
public byte[] Photo { get; set; }
Run Code Online (Sandbox Code Playgroud)
使用Photo列的图像数据类型创建数据库,如下所示:

问题是:
当我运行应用程序并尝试使用3 MB的照片保存学生时(例如),我得到一个例外:
validationError.ErrorMessage = "The field Photo must be a string or array type
with a maximum length of '4000'."
Run Code Online (Sandbox Code Playgroud)
SQL Server CE支持这些数据类型.在SQL Express和SQL Compact Edition(CE)之间的比较中,我们得知SQL CE通过使用图像数据类型来支持二进制(BLOB)存储.
Image =可变长度二进制数据,最大长度为2 ^ 30-1(1,073,741,823)字节.存储是以字节为单位的值的长度.
图像应该完成我认为的工作.
我在这做错了什么?这是一个错误吗?
注意:
我还尝试了MaxLength数据注释:
[Column(TypeName = "image")]
[MaxLength(int.MaxValue)]
public byte[] Photo { get; set; }
Run Code Online (Sandbox Code Playgroud)
但我得到这个例外:
Binary column with MaxLength greater than 8000 is not supported.
Run Code Online (Sandbox Code Playgroud)
编辑:
我找到了有关EF 4.1发布的 …
image code-first sql-server-ce entity-framework-4.1 asp.net-mvc-3
我试图在一次调用中急切地加载所有相关实体或实体集合.我的实体看起来像:
Class Person
{
public virtual long Id { get; set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
}
Class Employee
{
public virtual long Id { get; set; }
public DateTime AppointmentDate { get; set; }
public virtual ICollection<EmployeeTitle> Titles { get; set; }
public virtual Person Person { get; set; }
}
Class EmployeeTitle
{
public virtual long Id { get; set; }
public virtual bool IsCurrent { …Run Code Online (Sandbox Code Playgroud) c# entity-relationship code-first eager-loading entity-framework-4.1
如果重命名属性,Visual Studio IDE非常智能,可以帮助您重构在整个代码中重命名该属性.如果重命名位于EF迁移中使用的模型上,则运行标准自动迁移,如:
update-database -f
Run Code Online (Sandbox Code Playgroud)
你会得到这个:
AddColumn("NewName"...
DropColumn("OldName"...
Run Code Online (Sandbox Code Playgroud)
不是你想要的.显然,此时运行Add-Migration将允许您进入并手动将这两个调用更改为对RenameColumn的单个调用,但是有一些方法可以让自动迁移自动执行此操作吗?一些财产重命名方法可能会让我做得不对劲?
我在VS2012中使用EF 5.0,但这种行为也出现在EF 4.3.1和VS2010中.
entity-framework code-first ef-code-first ef-migrations entity-framework-5