【问题标题】:Entity Framework Core 2.1.1 Code First [duplicate]实体框架核心 2.1.1 代码优先 [重复]
【发布时间】:2018-07-12 12:58:31
【问题描述】:

这是我理解我的问题的方案。

在我的项目中,我参考了以下内容:

  • Microsoft.EntityFrameworkCore 2.1.1
  • Microsoft.EntityFrameworkCore.Design 2.1.1
  • Microsoft.EntityFrameworkCore.SqlServer 2.1.1
  • Microsoft.EntityFrameworkCore.SqlServer.Design 1.1.6
  • Microsoft.EntityFrameworkCore.Tools 2.1.1

我的代码是:

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”、“标志”、“uriParser”、“uri”。 在 Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConstructorBindingConvention.Apply(InternalModelBuilder 模型构建器) 在 Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.ImmediateConventionScope.OnModelBuilt(InternalModelBuilder 模型构建器) 在 Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.CreateModel(DbContext 上下文,IConventionSetBuilder 约定SetBuilder,IModelValidator 验证器) 在 System.Lazy1.ViaFactory(LazyThreadSafetyMode mode) at System.Lazy1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean 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](IInfrastructure1 存取器) 在 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_01.b__0() 在 Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(操作 action) 没有为实体类型“Uri”找到合适的构造函数。这 以下参数无法绑定到实体的属性: 'uriString'、'uriString'、'dontEscape'、'baseUri'、'relativeUri'、 'dontEscape'、'uriString'、'uriKind'、'baseUri'、'relativeUri'、 'serializationInfo'、'streamingContext'、'baseUri'、'relativeUri'、 “标志”、“uriParser”、“uri”。

有什么想法吗?

谢谢!

【问题讨论】:

  • 请创造一个更具描述性的标题。
  • @GertArnold 你是对的,这是一个重复的问题......我怎样才能删除这个?
  • 无需删除。您的问题现在可以作为副本的路标。

标签: c# sql-server entity-framework entity-framework-migrations ef-core-2.1


【解决方案1】:

System.Uri 不是 EF 可以映射的受支持类型。您需要在实现中向 EF 提供映射详细信息,或者您可以考虑使用字符串。

这个帖子里已经有一些不错的建议了:Map System.Uri using Entity Framework Fluent Api

【讨论】:

    猜你喜欢
    • 2019-07-22
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    相关资源
    最近更新 更多