У нас есть устаревшая база данных, и у нас есть требования для взаимодействия с этой базой данных только для чтения, чтобы получить некоторые данные (мы не можем изменить ее схему).
Существуют таблицы, которые не связаны друг с другом с помощью FK, но используют значения столбца, и, к сожалению, первичный ключ и связанный столбец в зависимой таблице имеют разные типы данных (ex char и nvarchar).
Использование Entity Framework Core Я написал несколько сопоставлений, например:
EntityTypeBuilder<Supplier>.HasMany(x => x.CatalogueItems)
.WithOne(x => x.Supplier)
.HasForeignKey(x => x.Vendor);
Но когда я пытаюсь загружать навигационные свойства, используя Включить метод:
dbContext.CatalogueItems.Include(x => x.Supplier).FirstOrDefault();
Я получаю поставщика как ноль, и когда я пишу его с использованием проекции, я получаю данные поставщика:
dbContext.CatalogueItems.Select(x => new {
x.ItemCode,
x.Supplier
}).FirstOrDefault();
Подскажите, пожалуйста, как мне настроить его, чтобы получить свойства навигации с помощью Включить?
Edit:
Startup.cs:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<MyDBContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("MyConnection")));
services.AddIdentityCore<User>()
.AddEntityFrameworkStores<MyDBContext>()
.AddDefaultTokenProviders();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
// Add application services.
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
app.UseHttpsRedirection();
}
app.UseMvc();
}
}