我试图使用实体框架与现有数据库进行通信。因此这是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; }
}
}
}
答案 0 :(得分:0)
Buddy课程的含义是什么意思?
同时使用[Key]
和[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
应该可以使用并忽略任何用户提供的值。保存到数据库后,属性应该有数据库生成的Guid。
您的班级lutConcentratePhysicalSiloType
没有EF数据注释,如果保存将采用您提供的值。 NewSequentialId()
是默认值,没有任何EF数据注释,数据库行将获得您在C#类中指定的任何值。