Рамка на обект, анотации на данни [DatabaseGenerated(DatabaseGeneratedOption.Identity)] и последователен GUID

Опитвам се да използвам рамката на обекта, за да комуникирам с моята съществуваща база данни. Това е първо DB. Използване на sql сървър и c#. Проблемът е, че бих искал да използвам последователен GUID, генериран от базата данни.

Всеки път, когато стартирам кода, моят контролер поставя GUID, присвоен на lutRoughagePhysicalSiloId, в DB (през повечето време 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 сървъра)

Автоматично създаден изглед на модел (първо DB):

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)


какво трябва да означава клас Buddy?

Използването както на [Key], така и на [DatabaseGenerated(DatabaseGeneratedOption.Identity)] трябва да работи и да игнорира всяка предоставена от потребителя стойност. След запазване в DB, ​​свойството трябва да има генерирания от DB Guid.

Вашият клас lutConcentratePhysicalSiloType няма анотации за EF данни и ако бъде запазен, ще приеме предоставените от вас стойности. NewSequentialId() е по подразбиране и без никакви пояснения към EF данни редът на DB ще получи каквато и да е стойност, която посочите в класа C#.

person T McKeown    schedule 03.04.2015