实体框架,数据注释[DatabaseGenerated(DatabaseGeneratedOption.Identity)]和顺序GUID

时间:2015-04-03 15:31:46

标签: sql-server entity-framework metadata guid uniqueidentifier

我试图使用实体框架与现有数据库进行通信。因此这是DB首先。使用sql server和c#。问题是我想使用由数据库生成的顺序GUID。

每次运行代码时,我的控制器都会将分配给lutRoughagePhysicalSiloId的GUID粘贴到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
)

(注意sql server默认生成的默认值newsequentialId())

自动创建的模型视图(数据库优先):

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; }
    }
}
}

1 个答案:

答案 0 :(得分:0)

Buddy课程的含义是什么意思?

同时使用[Key][DatabaseGenerated(DatabaseGeneratedOption.Identity)]应该可以使用并忽略任何用户提供的值。保存到数据库后,属性应该有数据库生成的Guid。

您的班级lutConcentratePhysicalSiloType没有EF数据注释,如果保存将采用您提供的值。 NewSequentialId()是默认值,没有任何EF数据注释,数据库行将获得您在C#类中指定的任何值。