相关疑难解决方法(0)

从表中的列中删除标识

我们有一个5GB的表(接近5亿行),我们想删除其中一个列上的标识属性,但是当我们尝试通过SSMS执行此操作时 - 它会超时.

这可以通过T-SQL完成吗?

sql t-sql sql-server

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

实体框架代码优先:迁移失败,更新数据库,强制不必要的(?)添加迁移

我使用迁移(EF 5.0)和代码优先有一个有趣的效果:

我用GUID主键创建了一些模型.(顺便说一句:对我来说,SQL Server使用它很重要NEWSEQUENTIALID(),这似乎是当前版本中的默认值)

在某些时候,我激活了迁移.我在初始迁移中添加了一些代码,这主要是.Index()根据需要.

当我删除数据库并调用update-database时,出现以下错误:

无法更新数据库以匹配当前模型,因为存在挂起的更改并且已禁用自动迁移.将挂起的模型更改写入基于代码的迁移或启用自动迁移.将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移.您可以使用Add-Migration命令将挂起的模型更改写入基于代码的迁移.

我尝试过AutomaticMigrationsEnabled = true,无需更改或添加任何内容即可使用!

但既然我不想要AutomaticMigrationsEnabled,我也尝试再次删除数据库,update-database然后调用add-migration.我最终得到了一个似乎没有改变任何东西的额外迁移(见下文).我也尝试将这些行添加到初始迁移的底部 - 但这并没有改变任何东西.

其中一个型号:

[Table(Speaker.TABLENAME)]
public class Speaker : BaseModel
{
    public const String TABLENAME = "Speaker";

    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }

    [Required]
    [MaxLength(50, ErrorMessage = "Name must be 50 characters or less")]
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

初始迁移代码:

public partial class InitialCreate : DbMigration
{
    public override void Up()
    { …
Run Code Online (Sandbox Code Playgroud)

entity-framework ef-migrations

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

ASP.NET MVC 6 - 为实体框架7中的主键分配NOT NULL

码:

migrationBuilder.AddPrimaryKey("AspNetRoles", "PK_AspNetRoles", new[] { "Id" }, isClustered: true);
Run Code Online (Sandbox Code Playgroud)

我收到错误消息为 Cannot define PRIMARY KEY constraint on nullable column in table 'AspNetRoles'.

MigrationBuilder的命名空间 - Microsoft.Data.Entity.Relational.Migrations.Builders

如何NOT NULLASP.NET MVC 6中分配上面的代码

c# asp.net entity-framework-core asp.net-core-mvc

6
推荐指数
1
解决办法
780
查看次数

您可以使用 Entity Framework 6 从主键中删除 Identity 吗?

我通过实体框架代码优先创建了一个表,主键设置为自动递增,但现在我想从列中删除该自动递增。我已经尝试使用流畅的 API 做到这一点:

    public class ProductTypeMap: EntityTypeConfiguration<ProductType>
    {
        public ProductTypeMap()
        {
            // This is an enum effectively, so we need fixed IDs
            Property(x => x.ProductTypeId)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
        }

    }
Run Code Online (Sandbox Code Playgroud)

还有一个注释:

    public class ProductType
    {
        [Required, Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int ProductTypeId { get; set; }
        public string ProductTypeName { get; set; }

    }
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,它们都生成相同的迁移代码:

    public partial class removeproducttypeidentity : DbMigration
    {
        public override void Up()
        {
            DropPrimaryKey("dbo.ProductTypes");
            AlterColumn("dbo.ProductTypes", "ProductTypeId", c => c.Int(nullable: false));
            AddPrimaryKey("dbo.ProductTypes", "ProductTypeId");
        }
        
        public override void Down()
        {
            DropPrimaryKey("dbo.ProductTypes"); …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework sql-server-2008 entity-framework-6

6
推荐指数
3
解决办法
8134
查看次数

DatabaseGenerateOption.None 在实体框架 6 中不起作用

我需要在数据库中手动输入主键值,因为我需要键值与枚举同步。但是,使用 DatabaseGeneeratedoption.None 似乎不起作用。即使我删除数据库并重新开始,JobType 中的 Id 列仍然具有自动递增的主键。

这与我使用枚举作为主键有关吗?

工作实体

public class Job : EntityBase
{
    public long JobId { get; set; }       
    public JobTypeEnum JobTypeId { get; set; }
    public JobType JobType { get; set; }      
}
Run Code Online (Sandbox Code Playgroud)

工作类型

public class JobType 
{         
    public JobTypeEnum Id { get; set; }
    public String Name { get; set; }
    public String Description { get; set; }       
}
Run Code Online (Sandbox Code Playgroud)

配置类

public class JobTypeConfiguration : EntityTypeConfiguration<JobType>
{
    public JobTypeConfiguration()
    {
        HasKey(x => x.Id);
        Property(x => x.Id)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); …
Run Code Online (Sandbox Code Playgroud)

.net c# entity-framework entity-framework-6

5
推荐指数
1
解决办法
7921
查看次数

使用Entity-Framework中更新的DatabaseGeneratedOption迁移实体

我根据这篇文章创建了代码优先的应用程序 - Code First to a New Database.现在我要更改DatabaseGeneratedOption Blog.BlogId.我以下一种方式更改了我的代码:

public class Blog
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int BlogId
    {
        get;set;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

并为此代码更新创建了迁移:

public override void Up()
{
    DropForeignKey("dbo.Posts", "BlogId", "dbo.Blogs");
    DropPrimaryKey("dbo.Blogs");
    AlterColumn("dbo.Blogs", "BlogId", c => c.Int(nullable: false, identity: false));
    AddPrimaryKey("dbo.Blogs", "BlogId");
    AddForeignKey("dbo.Posts", "BlogId", "dbo.Blogs", "BlogId", cascadeDelete: true);
}
Run Code Online (Sandbox Code Playgroud)

根据这个我更改了在Main函数中创建博客实体的代码(在BlogId那里添加.)

var blog = new Blog
{
    Name = name,
    BlogId = 110//it could be any other value that isn't represented in column
};
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试运行我的代码时,我得到下一个异常:带有下一条消息的DbUpdateException …

c# entity-framework ef-migrations

5
推荐指数
1
解决办法
3191
查看次数

EF忽略DatabaseGeneratedOption.None

我正在使用EF 6.1.3代码优先,但由于数据库已经存在,所以无法进行迁移。我有一个SRReports具有以下属性的实体:

[Key, Required]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.None)]
public int FRID { get; set; }
Run Code Online (Sandbox Code Playgroud)

DatabaseGeneratedOption.None假设FRID是自动生成的,实体框架将忽略,并将TSQL发送到服务器。为实体分配了FRID的值,但是实体框架忽略该值,并假定该值是自动生成的。(这是通过检查发送到服务器的TRACE确认的)。异常消息是:

Message =无法将值NULL插入表'RevLogon.dbo.SCIREPORTS'的列'FRID'中;列不允许为空。INSERT失败。该语句已终止。

我尝试使用流利的API来代替注释(并在注释之外)。

 modelBuilder.Entity<SCIREPORTS>()
            .HasKey(e => e.FRID);
 modelBuilder.Entity<SCIREPORTS>()
            .Property(e =>  e.FRID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
Run Code Online (Sandbox Code Playgroud)

但是当我查询表时出现错误:

SCIREPORTS sr = mydb.SCIREPORTS.Where(s => s.FRID == FRID     ).FirstOrDefault();     
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

捕获到System.MissingMethodException HResult = -2146233069消息=未找到方法:“ System.Data.Entity.ModelConfiguration.Configuration.PrimitivePropertyConfiguration System.Data.Entity.ModelConfiguration.Configuration.PrimitivePropertyConfiguration.HasDatabaseGeneratedOption(System.Nullable`1)”。*

我已卸载并重新安装了EF软件包,但无法解决此问题。如何获得EF插入带有ID的记录?

这是插入记录的基本代码:

public SRUserComp(string myemail, short mycounter, int myFRID, string myreptype, string mypassword)
    {   email = myemail;
        Counter = mycounter;
        reptype = myreptype;
        password = mypassword;
        FRID = myFRID;        }

public bool CreateSRRecord(DateTime repduedate,
        short repnumber) …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework primary-key ef-code-first

5
推荐指数
0
解决办法
991
查看次数

创建没有自动增量ID的实体框架表

使用实体框架SQL-Server-CE我创建了一个这样的表:

class Era {
    public long Id { get; set; }
    [Index(IsUnique=true), Required]
    public long Code { get; set; }
    public string Name { get; set; }
    public long StartDate { get; set; }
    public long EndDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

每当我尝试使用Entity Framework插入其中时,将忽略IdEra对象的字段并Id插入自动递增.

如何使Id字段不使用自动递增的值,而是使用给定的值,最好使用注释.

c# sql entity-framework sql-server-ce

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

使用 EF Core 插入具有手动分配 ID 的新实体

我需要将一个实体插入数据库,该实体对其 id 有约束,因此我想手动设置它。

注意:下面的模型是了解我正在做的事情的最小示例。整个过程在 ASP.NET Core 2 上运行,并带有 EF Core 和 Pomelo MySql 提供程序。

我正在尝试在现有数据库(MySQL)中创建一个实体,其定义如下:

CREATE TABLE Users (
    id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
    email VARCHAR(128) NOT NULL);

CREATE TABLE UserData (
    id INTEGER PRIMARY KEY,
    name VARCHAR(32) NOT NULL,
    FOREIGN KEY(id) REFERENCES Users(id));
Run Code Online (Sandbox Code Playgroud)

所以Users表中的每条记录在表中都有一条记录UserData。现在在我的代码中我想使用类似的东西

Context.Users.Add(user);
Context.SaveChanges();
data.Id = user.Id;
Context.UserData.Add(data);
Context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

它们User应该Id由数据库生成,然后UserData用它创建Id。然而,EF执行的语句会导致错误:

Failed executing DbCommand (6ms) [Parameters=[@p0='?', @p1='?' (Size = 32)], CommandType='Text', CommandTimeout='30']
  INSERT INTO …
Run Code Online (Sandbox Code Playgroud)

c# mysql entity-framework-core asp.net-core-2.0

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