我想使用POCO类中的Entity Framework Core创建数据库表。当我尝试添加新的脚手架项目(选项:VS中使用Entity Framework(CRUD)的Razor页面)时,出现错误消息:“找不到适用于实体类型'Uri'的合适构造函数”
我了解到,(除其他外)Uri必须在OnModelCreating方法(从dbContext继承的类中)中转换为String。
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));
}
}
学生班:
public class Student {
public int ID { get; set; }
public Uri Homepage {get; set; }
}
我知道输入命令“ Add-Migration Initial”时会调用OnModelCreating方法。但是由于我尝试自动实现CRUD类,因此无法输入命令“ Add Migration Initial”。 非常感谢,对不起我的英语不好。.
答案 0 :(得分:1)
var uri = new Uri(path);
uri.AbsolutePath();
答案 1 :(得分:0)
如果我正确理解您的要求,则可以尝试编写:
Path.Combine(Homepage.Segments);
创建代表Uri路径的字符串。
答案 2 :(得分:0)
如果您需要使用Uri属性Uri
将Uri.AbsolutePath
转换为字符串,则将返回Uri
的字符串转换。
例如:
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);
}
}
答案 3 :(得分:0)
我终于找到了解决我问题的方法:尽管我确实编写了一个从DbContext继承的SchoolDbContext类,但是我没有指定该特定类作为我的数据库访问的Context。当创建一个新的脚手架项目(使用实体框架(CRUD)的剃刀页面)时,要求您指定模型类和上下文类。不必使用“ +”按钮生成新的上下文(我一直都这样做),而是必须指定SchoolDbContext类。