标签: code-first

EF 更新数据库错误:值不能为空参数名称:类型

我尝试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 预览版。

.net c# entity-framework code-first

25
推荐指数
1
解决办法
1万
查看次数

实体框架代码中的SQL"时间"类型

我正在尝试使用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

24
推荐指数
1
解决办法
2万
查看次数

实体框架 - 外键组件...不是类型的声明属性

我有以下模型

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)

.net c# entity-framework code-first ef-code-first

24
推荐指数
1
解决办法
9881
查看次数

EF Code First Readonly专栏

我首先使用EF Code和数据库第一种方法."使用Database.SetInitializer(null);"

我的表有两列createddate和amendddate.它们由SQL Server使用触发器管理.我们的想法是,当数据输入发生时,这些列通过触发器获取数据.

现在我想做的是从EF Code的第一个角度来看这个只读.即我希望能够从我的应用程序中看到创建日期和已记录的日期,但我不想修改这些数据.

我尝试在setter上使用私有修饰符,但没有运气.当我尝试向表中添加新数据时,它试图将DateTime.Max日期输入到数据库,该数据库从SQL服务器抛出错误.

任何的想法?

entity-framework code-first entity-framework-4.1

22
推荐指数
1
解决办法
2万
查看次数

强制EF 4.1 Code First将附加实体视为已修改

我发现的所有示例都引用了一个名为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毕竟它被称为.如果对象已经附加,您将受益于对象的先前状态,这反过来将允许对数据库进行优化更新.但是,如果未附加对象,则该方法会强制整个对象变脏.

现在似乎很明显,不是之前.希望它可以帮助某人.

丰富

entity-framework code-first

21
推荐指数
1
解决办法
6547
查看次数

Oracle.ManagedDataAccess.EntityFramework - ORA-01918:用户'dbo'不存在

我正在尝试使用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)

oracle entity-framework odp.net code-first ef-migrations

21
推荐指数
2
解决办法
2万
查看次数

Code First与Database First

我基于现有数据库创建了一个实体框架模型,然后从模型中生成了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

20
推荐指数
2
解决办法
2万
查看次数

使用ASP.NET MVC 3和Entity Framework 4.1 Code First在SQL CE 4.0中存储映像时出错

我正在尝试将图像存储/保存在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

18
推荐指数
2
解决办法
8147
查看次数

使用实体框架加载嵌套实体/集合

我试图在一次调用中急切地加载所有相关实体或实体集合.我的实体看起来像:

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

18
推荐指数
2
解决办法
2万
查看次数

EF迁移:自动迁移中的RenameColumn?

如果重命名属性,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

18
推荐指数
2
解决办法
4649
查看次数