这是我了解问题的方案。
在我的项目中,我引用以下内容:
我的代码是:
public class Foo
{
public Guid Id { get; set; }
public String Name { get; set; }
public Uri Address { get; set; }
}
internal class DbManager : IDesignTimeDbContextFactory<DataContext>
{
public DataContext CreateDbContext(string[] args)
{
DbContextOptionsBuilder<DataContext> optionsBuilder = new DbContextOptionsBuilder<DataContext>();
optionsBuilder.UseSqlServer("[My connection string]");
return new DataContext(optionsBuilder.Options);
}
}
public class DataContext : DbContext
{
public DbSet<Foo> Foo { get; set; }
public DataContext(DbContextOptions<DataContext> options) : base(options)
{ }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Foo>().HasKey(a => a.Id).HasName($"{nameof(Foo)}_key");
modelBuilder.Entity<Foo>().ToTable("Partners");
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
现在,如果我在程序包管理器控制台中运行命令Add-Migration test1
,则会出现以下错误:
System.InvalidOperationException:未找到适合的构造函数 实体类型“ Uri”。以下参数无法绑定到 实体的属性:“ uriString”,“ uriString”,“ dontEscape”, 'baseUri','relativeUri','dontEscape','uriString','uriKind', 'baseUri','relativeUri','serializationInfo','streamingContext', 'baseUri','relativeUri','flags','uriParser','uri'。 在Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConstructorBindingConvention.Apply(InternalModelBuilder modelBuilder) 在Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.ImmediateConventionScope.OnModelBuilt(InternalModelBuilder modelBuilder) 在Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.CreateModel(DbContext 上下文,IConventionSetBuilder ConventionSetBuilder,IModelValidator 验证器) 在System.Lazy
1.ViaFactory(LazyThreadSafetyMode mode) at System.Lazy
1.ExecutionAndPublication(LazyHelper执行AndPublication,布尔值useDefaultConstructor)处 在System.Lazy1.CreateValue() at Microsoft.EntityFrameworkCore.Internal.DbContextServices.CreateModel() at Microsoft.EntityFrameworkCore.Internal.DbContextServices.get_Model() at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProviderEngineScope scope) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProviderEngineScope scope) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProviderEngineScope scope) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider) at Microsoft.EntityFrameworkCore.DbContext.get_DbContextDependencies() at Microsoft.EntityFrameworkCore.DbContext.get_InternalServiceProvider() at Microsoft.EntityFrameworkCore.Internal.InternalAccessorExtensions.GetService[TService](IInfrastructure
1 访问者) 在Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(Func1 factory) at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(String contextType) at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.AddMigration(String name, String outputDir, String contextType) at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigrationImpl(String name, String outputDir, String contextType) at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_0
1.b__0() 在Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(操作 操作)找不到适用于实体类型“ Uri”的合适的构造函数。的 以下参数无法绑定到实体的属性: 'uriString','uriString','dontEscape','baseUri','relativeUri', 'dontEscape','uriString','uriKind','baseUri','relativeUri', 'serializationInfo','streamingContext','baseUri','relativeUri', 'flags','uriParser','uri'。
有什么想法吗?
谢谢!
答案 0 :(得分:0)
System.Uri不是可以由EF映射的受支持类型。您需要在实现中为EF提供映射详细信息,或者可以考虑使用字符串。
这篇文章中已经有一些不错的建议:Map System.Uri using Entity Framework Fluent Api