C# 如何转换';Uri';使用实体框架核心时转换为字符串

C# 如何转换';Uri';使用实体框架核心时转换为字符串,c#,entity-framework-core,C#,Entity Framework Core,我想使用实体框架核心从POCO类创建数据库表。当我尝试添加一个新的scaffold项(选项:在VS中使用实体框架(CRUD)的Razor pages)时,会出现一个错误:“没有为实体类型'Uri'找到合适的构造函数” 我了解到(除其他外)Uri必须在OnModelCreating方法(在从dbContext继承的类中)中转换为字符串 DbContext类: public class SchoolDbContext : DbContext { public DbSet<S

我想使用实体框架核心从POCO类创建数据库表。当我尝试添加一个新的scaffold项(选项:在VS中使用实体框架(CRUD)的Razor pages)时,会出现一个错误:“没有为实体类型'Uri'找到合适的构造函数”

我了解到(除其他外)Uri必须在OnModelCreating方法(在从dbContext继承的类中)中转换为字符串

DbContext类:

    public class SchoolDbContext : DbContext {
      public DbSet<Student> Students { get; set; }

      protected override void OnModelCreating(ModelBuilder modelBuilder) {
        modelBuilder.Entity<Student>()
        .Property(t => t.Homepage)
        .HasConversion(
        v => v.ToString(),
        v => new Uri(v));
      }
    }
我知道输入命令“addmigrationinitial”时会调用OnModelCreating方法。但由于我试图自动实现CRUD类,所以无法输入命令“addmigrationinitial”。
非常感谢,请原谅我的英语不好。

如果我正确理解你的要求,你可以试着写:

var uri = new Uri(path);
uri.AbsolutePath();
Path.Combine(Homepage.Segments);

创建表示Uri路径的字符串

如果需要将
Uri
转换为字符串,请使用Uri属性
Uri.AbsolutePath
这将返回
Uri
的字符串转换。 例如:

公共班级学生
{
公共int ID{get;set;}
公共Uri主页{get;set;}
}
学生s=新学生();
字符串myUri=s.Homepage.AbsolutePath;
或
公共类SchoolDbContext:DbContext{
公共数据库集学生{get;set;}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder){
modelBuilder.Entity()
.Property(t=>t.Homepage.AbsolutePath);
}
}

我终于找到了解决问题的方法:虽然我确实编写了一个从DbContext继承的SchoolDbContext类,但我没有指定该特定类作为数据库访问的上下文。创建新的脚手架项目(使用实体框架(CRUD))时,会要求您指定模型类和上下文类。我没有使用“+”按钮生成新的上下文(我一直这样做),而是指定了SchoolDbContext类。

尝试在
Configure
方法中添加
HasConversion
代码,如前所述,谢谢,但我已经尝试过了。。
Path.Combine(Homepage.Segments);
  public class Student
   {
       public int ID { get; set; }
       public Uri Homepage { get; set; }
   }
   Student s= new Student();
   string myUri = s.Homepage.AbsolutePath;
or

    public class SchoolDbContext : DbContext {
    public DbSet<Student> Students { get; set; }

          protected override void OnModelCreating(ModelBuilder modelBuilder) {
            modelBuilder.Entity<Student>()
            .Property(t => t.Homepage.AbsolutePath);
          }
        }