目前我有一个项目需要处理具有用户可以指定的自定义字段的产品。
有谁知道使用模型和代码优先注释实现此目的的最佳方法是什么?
我想在数据库方面,我需要一个新表来处理链接到 ProductID 的自定义数据。
默认情况下,实体模型中未明确指定最大长度的字符串属性在nvarchar(max)数据库中设置为。我们希望覆盖这个约定并给字符串一个最大长度,nvarchar(100)如果它们还没有明确设置的话。
我发现了PropertyMaxLengthConvention内置约定,根据其描述和文档,这似乎是我正在寻找的。但是,它要么不起作用,要么我用错了它,要么就是它没有做我认为的那样。
我试过简单地添加约定:
modelBuilder.Conventions.Add(new PropertyMaxLengthConvention(100));
Run Code Online (Sandbox Code Playgroud)
然后我想也许默认的已经被使用了,所以我先尝试删除它:
modelBuilder.Conventions.Remove<PropertyMaxLengthConvention>();
modelBuilder.Conventions.Add(new PropertyMaxLengthConvention(100));
Run Code Online (Sandbox Code Playgroud)
我什至尝试在默认约定之前和之后显式添加约定:
modelBuilder.Conventions.AddBefore<PropertyMaxLengthConvention>(new PropertyMaxLengthConvention(100));
modelBuilder.Conventions.AddAfter<PropertyMaxLengthConvention>(new PropertyMaxLengthConvention(100));
Run Code Online (Sandbox Code Playgroud)
没有喜悦。当我添加迁移时,列仍然创建为nvarchar(max).
有没有办法使用该约定来做我想做的事?如果没有,我是否可以编写一个自定义约定,将默认字符串属性设置为nvarchar(100)但仍允许我将它们显式设置为不同的值,包括 maxlength?
我首先使用代码对 Oracle 数据库进行不区分大小写的字符串比较时遇到问题。代码看起来像这样;
String filter = "Ali";
var employee = dbContext.Employees.Where(x => x.Name.Contains(filter)).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
上面的代码区分大小写。所以我将 Name 和 filter 都转换为大写;
String filter = "Ali";
filter = filter.ToUpper();
var employee = dbContext.Employees.Where(x => x.Name.ToUpper().Contains(filter)).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
一开始似乎一切正常,但后来我意识到当员工姓名或过滤器包含字符“i”时它不起作用。问题是字母 i 在土耳其语中是如何工作的。
在大多数语言中,“i”代表小写字母,“I”代表字符的大写版本。但是在土耳其语中,“i 的大写字母是 '?”,而“I 的小写字母是 '?”。这是一个问题,因为 Oracle 将数据库中的字母“i”大写为“I”。
我们无法访问数据库的字符编码设置,因为它的影响不容易预见。
我想出的是这个,它非常丑陋。
String filterInvariant = filter.ToUpper(CultureInfo.InvariantCulture);
String filterTurkish = filter.ToUpper(CultureInfo.CreateSpecificCulture("tr-TR"));
var employee = dbContext.Employees.Where(x => x.Name.ToUpper().Contains(filterInvariant) || x.Name.ToUpper().Contains(filterTurkish)).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
它似乎解决了一些问题,但感觉像是一种蛮力的解决方法,而不是一个可靠的解决方案。在对 Oracle 数据库使用 Code First C# 时,最佳实践或替代方法是什么?
提前致谢
我们正在首先使用实体框架和代码在 .Net 中创建一个新应用程序。
我们目前的问题是,有没有办法在特定文件中编写所有存储过程,并在创建新数据库时运行/执行它们。
主要思想是在 Seed 方法中编写一些逻辑并从 txt 文件中读取数据并执行那些 st。程序。
如果有任何其他可能的方法更好或更优雅,请指导。以及这种运行圣的方法。程序是否可取。任何帮助表示赞赏。
我把我的模型放在一个带有 Core 的类库中。我已经进行了第一次迁移来测试我的模型的一部分,但是在进行了很大的增强之后,我删除了我的数据库和迁移,只有一个 V1 迁移。
问题是,在删除之后,当我尝试出现add-migration此错误时:
System.InvalidOperationException: The entity type 'CustomAttributeData' requires a primary key to be defined.
at Microsoft.EntityFrameworkCore.Internal.ModelValidator.ShowError(String message)
at Microsoft.EntityFrameworkCore.Internal.ModelValidator.Validate(IModel model)
at Microsoft.EntityFrameworkCore.Internal.RelationalModelValidator.Validate(IModel model)
at Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.CreateModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator)
at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
at Microsoft.EntityFrameworkCore.Internal.DbContextServices.CreateModel()
at Microsoft.EntityFrameworkCore.Internal.LazyRef`1.get_Value()
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider)
at Microsoft.Extensions.DependencyInjection.ServiceProvider.<>c__DisplayClass16_0.<RealizeService>b__0(ServiceProvider provider)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetService[T](IServiceProvider provider)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitTransient(TransientCallSite transientCallSite, ServiceProvider provider)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProvider provider)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitTransient(TransientCallSite transientCallSite, ServiceProvider provider)
at Microsoft.Extensions.DependencyInjection.ServiceProvider.<>c__DisplayClass16_0.<RealizeService>b__0(ServiceProvider provider)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
at …Run Code Online (Sandbox Code Playgroud) 这是我的代码:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<AppDbContext>(options =>
{
options.UseSqlServer(Configuration.GetConnectionString("AppDbContext"));
});
services.AddMvc();
}
Run Code Online (Sandbox Code Playgroud)
这是我的 DbContext:
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
{
}
public DbSet<Actor> Actors { get; set; }
public DbSet<Movie> Movies { get; set; }
public DbSet<MovieActor> MovieActors { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的 ConnectionString 很好。我真的很想知道为什么我的数据库在运行这段代码时没有生成?断点正在行中,services.AddDbContext但是当我在AppDbContext其中放置断点时没有命中。有人可以帮忙吗?我的代码看起来像这样https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/intro
我刚刚将一个应用程序部署到一个 azure 应用服务中。我的项目确实有要应用的迁移。但是我无法通过使用 azure app 命令行来应用它们
dotnet ef 数据库更新
D:\home\site\wwwroot> 找不到匹配命令“dotnet-ef”的可执行文件
我如何远程应用它们?
我需要进行“全文索引”,但我使用的是 ef core 2.1 代码第一次迁移,但完整索引在核心中没有一流的支持。
我如何编写自己的迁移,以便在应用其他生成的迁移时应用?
entity-framework ef-code-first entity-framework-core entity-framework-migrations
我正在尝试学习如何在 EF Core 中正确使用 DbContext。我有一个团队课程:
public class Team
{
public int ID { get; set; }
public string Name { get; set; }
public bool CanSelfManage { get; set; } = false;
public virtual List<Mileage> Mileages { get; set; }
public IdentityUser Member { get; set; }
public string State { get; set; }
public List<Horse> Horses { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
还有一个里程类:
public class Mileage
{
public int ID { get; set; }
public virtual Team Team { get; …Run Code Online (Sandbox Code Playgroud) c# entity-framework ef-code-first entity-framework-migrations
我有以下课程:
public class Quiz
{
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string UserToken { get; set; }
public List<JoinQuizAndArea> AreasOfQuizzes { get; set; }
public List<QuizQuestion> Questions { get; set; }
}
public class QuizQuestion
{
public int ListRanking { get; set; }
public string Question { get; set; }
public string Answer1 { get; set; }
public string Answer2 { get; set; } …Run Code Online (Sandbox Code Playgroud) c# ef-code-first asp.net-core entity-framework-migrations ef-core-3.0
ef-code-first ×10
c# ×6
asp.net-core ×3
entity-framework-migrations ×3
asp.net-mvc ×2
.net ×1
azure ×1
dotnet-cli ×1
ef-core-2.0 ×1
ef-core-3.0 ×1
linq ×1
oracle ×1