Моя база данных меняется относительно быстро, так как я на ранней стадии разработки, поэтому я генерирую сущности с помощью Scaffold-DbContext
, что приводит к C #:
public partial class User
{
public int Id { get; set; }
public string Name { get; set; }
}
// And in the DbContext:
modelBuilder.Entity<User>(entity => {
entity.ToTable("User");
entity.Property(e => e.Name)
.IsRequired()
.HasMaxLength(32)
.IsUnicode(false);
});
Это приводит к автоинкременту моего ПК:
Вот мой ошибочный код:
module DbFactory =
let options = DbContextOptionsBuilder().UseSqlServer("connectionstring").Options
let create () = new MyDb(options)
module DbService =
let command (q) : unit =
use db = DbFactory.create ()
q db |> ignore
db.SaveChanges () |> ignore
let h = User (
Id = Unchecked.defaultof<int>, // I've also tried -1, 0, 1, null, and removing this row entirely
Name = "bork")
DbService.command (fun db -> db.Users.Add h)
Так как я устанавливаю Id
, EF выдает следующую ошибку:
System.Data.SqlClient.SqlException: невозможно вставить явное значение для столбца идентификаторов в таблице «Пользователь», если для параметра IDENTITY_INSERT установлено значение OFF.
Ошибка не возникает с этим кодом C #, который не устанавливает идентификатор:
var c = new DbFactory();
var user = new User() {
Name = "bork",
};
var db = c.Create();
db.Users.Add(user);
db.SaveChanges();
Как мне сделать так, чтобы мой F # выглядел так, как будто он не устанавливает Id
? Поскольку это не тип записи (я думаю, что CLIMutable), я попытался User (Name = "bork")
, но это также не помогло с той же ошибкой.
Я тоже новичок в F #, поэтому дайте мне знать, может ли мой F # быть чище.