Как добавить строку с автоматически сгенерированным идентификатором через EF Core, используя F # с поддержкой C #? - PullRequest
0 голосов
/ 17 марта 2019

Моя база данных меняется относительно быстро, так как я на ранней стадии разработки, поэтому я генерирую сущности с помощью 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);
});

Это приводит к автоинкременту моего ПК:

enter image description here

Вот мой ошибочный код:

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 # быть чище.

1 Ответ

0 голосов
/ 18 марта 2019

@ jgoday научил меня важности изоляции проблемы.Его ответ отвязал меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...