Я не могу разрешить отношения один-к-одному между двумя классами, используя Shadow Properties в качестве ключей.К сожалению, я не могу создать свойства реальных ключей в своих классах, потому что я использовал стороннюю библиотеку классов.
using Microsoft.EntityFrameworkCore;
using System;
namespace EFCoreTest
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Create database");
using (var context = new ClassDbContext())
{
if (!context.Database.EnsureDeleted())
{
Console.WriteLine(" => Can't delete database");
}
if (context.Database.EnsureCreated())
{
context.SaveChanges();
Console.WriteLine(" => Done");
}
else
{
Console.WriteLine(" => Can't create database");
}
}
Console.WriteLine("End");
}
}
public class ClassDbContext : DbContext
{
public virtual DbSet<ClassA> ClassA { get; set; }
public virtual DbSet<ClassB> ClassB { get; set; }
public ClassDbContext()
{
}
public ClassDbContext(DbContextOptions<ClassDbContext> options) : base(options)
{
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer("Server=XXX.XXX.XXX.XXX;Database=XXXXX;User ID=XXXXX;Password=XXXXX");
}
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<ClassA>().Property<int>("ClassAId");
modelBuilder.Entity<ClassB>().Property<int>("ClassBId");
modelBuilder.Entity<ClassB>().Property<int>("AnotherClassId");
modelBuilder.Entity<ClassB>().HasOne(p => p.AnotherClass).WithMany().HasForeignKey("AnotherClassId");
}
}
public class ClassA
{
public string PropertyA { get; set; }
}
public class ClassB
{
public string PropertyB { get; set; }
public ClassA AnotherClass { get; set; }
}
}
EF Core возвращает следующую ошибку, которая меня очень смущает:
System.InvalidOperationException : 'Связь между' ClassB.AnotherClass 'и' ClassA 'со свойствами внешнего ключа {' AnotherClassId ': int } не может быть нацелена на первичный ключ {'ClassAId ': int } , поскольку он не совместим .Настройте основной ключ или набор совместимых свойств внешнего ключа для этого отношения. '