Обязательные ошибки, связанные с проверкой связанного объекта - PullRequest
0 голосов
/ 28 марта 2019

У меня есть что-то вроде следующего:

public class EntityA
{
    [Required]
    long? EntityBId { get; set; }

    [ForeignKey("EntityBId ")]
    public virtual EntityB { get; set; }
}

public class EntityB
{
    [Key]
    long EntityBId { get; set; }
}

Когда я использую его следующим образом, я получаю ошибку проверки, потому что обязательное свойство EntityBId равно нулю.

EntityA a = new EntityA();
a.EntityB = new EntityB();
dbContext.EntityAs.Add(EntityA);
dbContext.SaveChanges();

Однако, если я удаляю атрибут [Required], то EntityA и EntityB добавляются в базу данных, а EntityBId заполняется вызовом SaveChanges.

Как пометить EntityBId как[Required] и избежать проверки правильности структуры сущностей?

Ответы [ 2 ]

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

Возможны два сценария:

Первый: EntityB уже существует в базе данных, и вы указываете EntityBId из EntityB на EntityBId ForeignKey нового EntityA следующим образом, и в этом случае только EntityA будет вставлен в базу данных:

EntityB entityB = dbContext.EntityBs.FirstOrDefault(yourCondition) 

EntityA entityA = new EntityA();
entityA.EntityBId = entityB.EntityBId; // <-- assign `ForeignKey` value instead of navigation property value, hence no required validation error will occur

dbContext.EntityAs.Add(entityA);
dbContext.SaveChanges();

Секунда: EntityB еще не существует вбаза данных, и она будет вновь добавлена ​​в базу данных вместе с EntityA.Так что в этом случае ваш код должен выглядеть следующим образом:

EntityB entityB = new EntityB();
dbContext.EntityBs.Add(entityB);

EntityA entityA = new EntityA();
entityA.EntityBId = entityB.EntityBId; // <-- assign `ForeignKey` value instead of navigation property value, hence no required validation error will occur
dbContext.EntityAs.Add(entityA);
dbContext.SaveChanges();

Теперь решите, каков ваш сценарий и сделайте соответственно.

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

См. Эту ссылку для использования Обязательная аннотация: https://docs.microsoft.com/en-us/ef/ef6/modeling/code-first/data-annotations -

"Обязательная аннотация говорит EF, что конкретное свойство требуется.

Добавление Обязательного к свойству Title заставит EF (и MVC) убедитесь, что свойство содержит данные. "

так что вы должны решить, если вы хотите аннотацию [Обязательный], то это означает, что она не допускает обнуляемое свойство. И если у вас все в порядке с нулевым значением, удалите аннотацию [Обязательный].

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