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