C# 实体框架核心2.1.1代码优先
这是我理解我的问题的场景 在我的项目中,我参考了以下内容:C# 实体框架核心2.1.1代码优先,c#,sql-server,entity-framework,entity-framework-migrations,ef-core-2.1,C#,Sql Server,Entity Framework,Entity Framework Migrations,Ef Core 2.1,这是我理解我的问题的场景 在我的项目中,我参考了以下内容: 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
- 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!");
}
}
公共类Foo
{
公共Guid Id{get;set;}
公共字符串名称{get;set;}
公共Uri地址{get;set;}
}
内部类DbManager:IDesignTimeDbContextFactory
{
公共DataContext CreateDbContext(字符串[]args)
{
DbContextOptionsBuilder optionsBuilder=新的DbContextOptionsBuilder();
optionsBuilder.UseSqlServer(“[My connection string]”);
返回新的DataContext(optionsBuilder.Options);
}
}
公共类DataContext:DbContext
{
公共DbSet Foo{get;set;}
公共数据上下文(DbContextOptions):基本(选项)
{ }
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity().HasKey(a=>a.Id).HasName($“{nameof(Foo)}\u key”);
modelBuilder.Entity().ToTable(“合作伙伴”);
}
}
班级计划
{
静态void Main(字符串[]参数)
{
控制台。WriteLine(“你好,世界!”);
}
}
现在,如果我在Package Manager控制台中运行命令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
模型生成器)
位于Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.ImmediateConventionScope.OnModelBuilt(InternalModelBuilder
模型生成器)
位于Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.CreateModel(DbContext
上下文,IConventionSetBuilder约定SetBuilder,IModelValidator
验证器)
在System.Lazy1.ViaFactory(LazyThreadSafetyMode模式)
在System.Lazy
1.ExecutionAndPublication(LazyHelper ExecutionAndPublication,布尔值useDefaultConstructor)
在System.Lazy1.CreateValue()中
在Microsoft.EntityFrameworkCore.Internal.DbContextServices.CreateModel()中
在Microsoft.EntityFrameworkCore.Internal.DbContextServices.get_Model()中
位于Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite
scopedCallSite,ServiceProviderEngineeScope范围)
位于Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite
施工人员所有现场、服务供应商(工程范围)
位于Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite
scopedCallSite,ServiceProviderEngineeScope范围)
位于Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider
提供程序,类型(服务类型)
位于Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider
供应商)
在Microsoft.EntityFrameworkCore.DbContext.get_DbContextDependencies()中
在Microsoft.EntityFrameworkCore.DbContext.get\u InternalServiceProvider()中
在Microsoft.EntityFrameworkCore.Internal.InternalAccessorExtensions.GetService[TService](IInfrastructure)中
存取器)
位于Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(Func1
工厂)
位于Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(字符串
上下文类型)
位于Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.AddMigration(字符串
名称、字符串输出目录、字符串上下文类型)
位于Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigrationImpl(字符串
名称、字符串输出目录、字符串上下文类型)
在Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.c__DisplayClass3_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'
有什么想法吗
谢谢大家! System.Uri不是可由EF映射的受支持类型。您需要在您的实现中提供具有映射细节的EF,或者您可以考虑使用字符串。
这篇文章中已经有一些很好的建议:请用一个更具描述性的标题。@GertArnold你是对的,这是一个重复的问题。。。我怎样才能移除这个?不需要移除它。你的问题现在可以作为复制品的路标。