标签: entity-framework-migrations

EF Core - 复合主键删除一个索引

我有这个实体:

[Table("order")]
public class Order
{
    [Key]
    [Column("id")]
    public Guid Id { get; set; }

    [MaxLength(128)]
    [Column("description")]
    public string Description { get; set; }

    [ForeignKey("Student")]
    [Column("student_id")]
    public Guid StudentId { get; set; }

    [ForeignKey("Employer")]
    [Column("employer_id")]
    public Guid EmployerId { get; set; }

    [ForeignKey("Customer")]
    [Column("customer_id")]
    public Guid CustomerId { get; set; }

    public virtual Guid Student { get; set; }
    public virtual Guid Employer { get; set; }
    public virtual Guid Customer { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我看到下一个快照DbContext

modelBuilder.Entity("DataInterface.Models.Order", …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework entity-framework-core entity-framework-migrations

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

如何在代码优先迁移中获取数据库的名称

我正在尝试先进行代码迁移以打开文件流,这样就不必手动完成。

我当然可以在数据库级别配置文件流(虽然我无法在服务上设置设置...)

但我需要执行这样的事情

ALTER DATABASE DBNAME
Run Code Online (Sandbox Code Playgroud)

添加文件组 FILESTREAMGroupName

包含文件流

所以我需要获取我正在使用的数据库的名称。

一旦我能得到它,然后我就可以通过查找文件来找出主 MDF 的路径,然后将文件流组的路径设置为我的下一个命令,但我无法弄清楚如何在其中获取数据库名称数据库迁移。

想法?

entity-framework ef-code-first entity-framework-migrations

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

EF Core - 在 PostgreSQL 13 中将列类型从 varchar 更改为 uuid:列不能自动转换为类型 uuid

前:

public class MyEntity
{
    public string Id { get; set; }
    //...
}
Run Code Online (Sandbox Code Playgroud)

配置:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    //...

    modelBuilder.Entity<MyEntity>()
        .Property(e => e.Id)
        .ValueGeneratedOnAdd();
}
Run Code Online (Sandbox Code Playgroud)

这是先前开发人员的代码,它导致该列的 GUID 值。但是在 C# 中我不得不处理字符串,所以我决定改变模型。

后:

public class MyEntity
{
    public Guid Id { get; set; }
    //...
}
Run Code Online (Sandbox Code Playgroud)

ValueGeneratedOnAdd()从 Fluent API 配置中删除了代码。

我得到了column "Id" cannot be cast automatically to type uuid错误。

我认为这个信息的关键是这个automatically词。

现在我的问题是,由于该列上的值已经是 GUID/UUID,有没有办法告诉 Postgres 将varchar类型更改为uuid并将当前字符串值转换为 UUID 并将其放入列中?我猜应该有一个 SQL 脚本可以做到这一点而不会丢失任何数据。

postgresql npgsql entity-framework-core entity-framework-migrations

0
推荐指数
2
解决办法
1117
查看次数

EF Code First 迁移 maxLength 设置为 4000 而不是 max

tl;dr:我有一个应该是的列,NVARCHAR(MAX)但是用脚手架进行迁移Add-Migration给了我一个最大长度为 4000 in 的列Up()。我必须做什么才能做到这一点MAX


考虑以下模型:

public class Foo
{
    public int Id { get; set; }

    [Required]
    [StringLength(100)]
    public string Name { get; set; }

    [Required]
    [DataType(DataType.MultilineText)]
    public string Memo { get; set; }

    [Required]
    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我在以下地方建立了两个约定Context.OnModelCreating

  • 将任何未配置的字符串属性的默认 maxLength 设置为 1024 的约定,其中包含以下行:

    Properties<string>().Configure(c => c.HasMaxLength(1024));
    
    Run Code Online (Sandbox Code Playgroud)
  • 基于属性的约定,读取DataTypeAttribute并相应地设置一些属性,即列类型和长度:

        switch (attribute.DataType)
        {
            case DataType.MultilineText:
                configuration.HasColumnType("nvarchar").IsMaxLength();
                break;
            case DataType.EmailAddress:
                configuration.HasColumnType("nvarchar").HasMaxLength(255);
                break;
        }
    
    Run Code Online (Sandbox Code Playgroud)

我在设置迁移之前测试了这一切,它工作得很好,给了我下表 - …

entity-framework ef-code-first entity-framework-migrations

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