public class Name
{
public Name(string userName)
{
UserName = userName;
}
public int NameID { get; set; }
public string UserName { get; set; }
public User User { get; set; }
}
public class User
{
public User(int firstNameFK, int secondNameFK, string lastName)
{
FirstNameFK = firstNameFK;
SecondNameFK = secondNameFK;
LastName = lastName;
}
public int UserID { get; set; }
public string LastName { get; set; }
public int FirstNameFK { get; set; }
public Name FirstName { get; set; }
public int SecondNameFK { get; set; }
public Name SecondName { get; set; }
}
public class FluentApiDbContext : DbContext
{
public FluentApiDbContext(DbContextOptions<FluentApiDbContext> options) : base(options)
{
}
public DbSet<User> Users { get; set; }
public DbSet<Name> Names { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<User>(u =>
{
u.HasOne(h => h.FirstName).WithOne().HasForeignKey<User>(h => h.FirstNameFK);
u.HasOne(h => h.SecondName).WithOne().HasForeignKey<User>(h => h.SecondNameFK);
});
}
}
public static class DbInitializer
{
public static void Initialize(FluentApiDbContext context)
{
context.Database.EnsureCreated();
if (!context.Users.Any())
{
List<User> users = new()
{
new User (1,2,"Olczyk"),
new User (3,1,"Kowalski"),
};
context.AddRange(users);
context.SaveChanges();
}
if (!context.Names.Any())
{
List<Name> adresses = new()
{
new Name ("Piotr"),
new Name ("Pawel"),
new Name ("Jan")
};
context.AddRange(adresses);
context.SaveChanges();
}
}
//fragment program.cs
...
app.MapGet("/getUsers", (FluentApiDbContext contextDB) =>
{
var result = contextDB.Users.Include(i => i.FirstName).Include(i => i.SecondName).ToList();
return result;
})
...
}
taki mam komunikat w trakcie tworzenia DB
Failed executing DbCommand (4ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE TABLE [Users] (
[UserID] int NOT NULL IDENTITY,
[LastName] nvarchar(max) NOT NULL,
[FirstNameFK] int NOT NULL,
[SecondNameFK] int NOT NULL,
CONSTRAINT [PK_Users] PRIMARY KEY ([UserID]),
CONSTRAINT [FK_Users_Names_FirstNameFK] FOREIGN KEY ([FirstNameFK]) REFERENCES [Names] ([NameID]) ON DELETE CASCADE,
CONSTRAINT [FK_Users_Names_SecondNameFK] FOREIGN KEY ([SecondNameFK]) REFERENCES [Names] ([NameID]) ON DELETE CASCADE
);
Microsoft.Data.SqlClient.SqlException (0x80131904): Introducing FOREIGN KEY constraint 'FK_Users_Names_SecondNameFK' on table 'Users' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Could not create constraint or index. See previous errors.
Możliwe że to jest kwestia bazy. Ty robisz to na SQLite a ja na Microsoft LocalDB Visual Studio 2022.