Почему я не могу вставить строку в таблицу Entity Framework? - PullRequest
0 голосов
/ 04 мая 2018

Я использовал опцию для генерации кода EF из БД. Когда я пытаюсь вставить, я получаю сообщение об ошибке, что "bundle_id" требуется, даже если то, что я вставляю, имеет bundle_id.

Вот мой код

[Table("[storage.tblCBMinCreditRequirement]")]
public partial class storage_tblCBMinCreditRequirement
{
    [Key]
    [Column(Order = 0)]
    [StringLength(255)]
    public string bundle_id { get; set; }

    [Key]
    [Column(Order = 1)]
    [StringLength(255)]
    public string deal_detail_id { get; set; }

    [StringLength(10)]
    public string version_code { get; set; }

    [StringLength(255)]
    public string applicant_id { get; set; }

    [StringLength(255)]
    public string score { get; set; }

    [StringLength(255)]
    public string thin_no_hit { get; set; }

    [StringLength(255)]
    public string thin_no_hit_proxy { get; set; }

    [StringLength(255)]
    public string thin_file { get; set; }

    [StringLength(255)]
    public string thin_file_no_hit { get; set; }

    [StringLength(255)]
    public string limited_credit_flag { get; set; }

    [StringLength(255)]
    public string limited_credit_empl { get; set; }

    [StringLength(255)]
    public string limited_credit_sat_auto { get; set; }

    [StringLength(255)]
    public string qualified_trades { get; set; }

    [StringLength(255)]
    public string sat_auto_mortgage_trade { get; set; }

    [StringLength(255)]
    public string min_num_sat_auto_trade { get; set; }

    [StringLength(255)]
    public string total_bks { get; set; }

    [StringLength(255)]
    public string delinquent_mortgage { get; set; }

    [StringLength(255)]
    public string delinquent_auto { get; set; }

    [StringLength(255)]
    public string high_credit_amount { get; set; }

    [StringLength(255)]
    public string min_age_on_file { get; set; }

    [StringLength(255)]
    public string min_fico { get; set; }

    [Column(TypeName = "numeric")]
    public decimal? CBCreditScoreFactors_Id { get; set; }
}

storage_tblCBMinCreditRequirement newt = InsertTable<storage_tblCBMinCreditRequirement>(new storage_tblCBMinCreditRequirement(), "/Loan/CoApplicant/CBCreditScoreFactors/CBMinCreditRequirement");

db.storage_tblCBMinCreditRequirement.Add(newt); 
db.SaveChanges();//throws exception

Вот моя БД. DB Image

Вот моя сущность Entity 1 Entity 2

Вот моя ошибка enter image description here

Спасибо за любую помощь, я в тупике! :) А теперь стихотворение для переполнения стека, для того, чтобы быть нелепым в желании большего количества описания.

переполнение стека, ты должен знать, Этот код является режимом, чтобы показать мою ярость на машине.

Как еще я буду отлаживать тебя? Какие напрасные слова ты хочешь от меня? Должны ли мои пустые слова быть полезными? Как ты определяешь ценность моих слов и кода? Разве недостаточно кода? Оправданная ли поэзия оправдывает тебя, O 'Stack Overflow?

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Просто чтобы добавить к исходному комментарию @ DevilSuichiro, вам нужно установить DatabaseGeneratedOption.None для свойства bundle_id вашей сущности, как показано ниже. Было задано полное имя, поэтому вам не нужно искать пространство имен:)

[Key]
[Column(Order = 0)]
[StringLength(255)]   
[DatabaseGenerated(DatabaseGeneratedOption.None)] // Located here: System.ComponentModel.DataAnnotations.Schema
public string bundle_id { get; set; }

Почему?

По умолчанию DatabaseGeneratedOption.Identity по умолчанию устанавливается в Entity Framework для столбца первичного ключа. Это указывает на то, что База данных отвечает за генерацию значения. В результате Entity Framework исключает столбец из любых сгенерированных операторов SQL Insert , так как он ожидает, что SQL сгенерирует значение.

Чтобы увидеть это в действии, используйте

yourDbContext.Database.Log() = (query) => Debug.WriteLine(query);

перед выполнением SaveChanges или запуском SQL Profiler, чтобы увидеть различия в сгенерированном SQL.

UPDATE

Для ясности, когда вы используете Database.Log () = (query) => Debug.WriteLine (query); результаты выводятся в окно инструментов диагностики Visual Studio. Это запускается по умолчанию при запуске сеанса отладки , если ранее вы не закрывали окно.

Если он не отображается во время отладки, его можно найти здесь: Отладка -> Windows -> Показать инструменты диагностики.

Ниже приведен пример вывода, чтобы вы знали, что ищете:

Sample Diagnostic Tool Output

0 голосов
/ 04 мая 2018

Вы можете попробовать скрыть для bundle_id в вашем файле cshtml.

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