Структура сущностей, аннотации данных [DatabaseGenerated(DatabaseGeneratedOption.Identity)] и последовательный идентификатор GUID

Я пытаюсь использовать структуру сущностей для связи с моей существующей БД. Таким образом, это БД в первую очередь. Использование SQL-сервера и С#. Проблема в том, что я хотел бы использовать последовательный GUID, сгенерированный базой данных.

Каждый раз, когда я запускаю код, мой контроллер вставляет GUID, назначенный lutRoughagePhysicalSiloId, в БД (в большинстве случаев lutRoughagePhysicalSiloId — это просто пустой GUID (000..), поскольку я его не заполняю). Насколько я вижу, этого не должно происходить, поскольку я использую [DatabaseGenerated(DatabaseGeneratedOption.Identity)].

Любые идеи?

SQL-код

CREATE TABLE [dbo].[lutRoughagePhysicalSiloType]
(
    [RoughagePhysicalSiloTypeId] UNIQUEIDENTIFIER NOT NULL PRIMARY KEY     UNIQUE DEFAULT NEWSEQUENTIALID(),
    [PhysicalSiloTypeName] NVARCHAR(50) NOT NULL UNIQUE
)

(Обратите внимание на значение по умолчанию newsequentialId(), которое по умолчанию генерируется сервером sql)

Автоматически созданное представление модели (сначала БД):

namespace guiIlvoDairyCowBarn.Models
{
using System;
using System.Collections.Generic;

public partial class lutConcentratePhysicalSiloType
{
    public lutConcentratePhysicalSiloType()
    {
        this.lutConcentratePhysicalSiloes = new HashSet<lutConcentratePhysicalSilo>();
    }

    public System.Guid ConcentratePhysicalSiloTypeId { get; set; }
    public string PhysicalSiloTypeName { get; set; }

    public virtual ICollection<lutConcentratePhysicalSilo> lutConcentratePhysicalSiloes { get; set; }
}
}

приятель класс

namespace guiIlvoDairyCowBarn.Models
{
[MetadataType(typeof(lutRoughagePhysicalSiloMD))]
public partial class lutRoughagePhysicalSiloType
{
    public class lutRoughagePhysicalSiloMD
    {

        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public System.Guid RoughagePhysicalSiloTypeId { get; set; }

        [Required, DisplayName("Physical silo type")]
        public string PhysicalSiloTypeName { get; set; }

        public virtual ICollection<lutRoughagePhysicalSilo> lutRoughagePhysicalSiloes { get; set; }
    }
}
}

person Frostie Flakes    schedule 03.04.2015    source источник


Ответы (1)


что означает класс друзей?

Использование как [Key], так и [DatabaseGenerated(DatabaseGeneratedOption.Identity)] должно работать и игнорировать любое введенное пользователем значение. После сохранения в БД свойство должно иметь сгенерированный БД Guid.

В вашем классе lutConcentratePhysicalSiloType нет аннотаций данных EF, и в случае сохранения он примет указанные вами значения. NewSequentialId() используется по умолчанию, и без каких-либо аннотаций данных EF строка БД получит любое значение, указанное вами в классе C#.

person T McKeown    schedule 03.04.2015