我有这个实体:
[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
我正在尝试先进行代码迁移以打开文件流,这样就不必手动完成。
我当然可以在数据库级别配置文件流(虽然我无法在服务上设置设置...)
但我需要执行这样的事情
ALTER DATABASE DBNAME
Run Code Online (Sandbox Code Playgroud)
添加文件组 FILESTREAMGroupName
包含文件流
所以我需要获取我正在使用的数据库的名称。
一旦我能得到它,然后我就可以通过查找文件来找出主 MDF 的路径,然后将文件流组的路径设置为我的下一个命令,但我无法弄清楚如何在其中获取数据库名称数据库迁移。
想法?
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
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)我在设置迁移之前测试了这一切,它工作得很好,给了我下表 - …