我有一个连接到EF数据库的mvc5应用程序。此数据库中的某些字段应按SQL中声明的方式自动生成,但在MVC中使用时和插入记录时,GUID仅包含所有记录的值0。我该如何解决这个问题?任何帮助将不胜感激。感谢。
模特课:
public partial class Store
{
public int StoreID { get; set; }
public int CustomerID { get; set; }
public string StoreName { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public System.Guid StoreUID { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int StoreNumber { get; set; }
public string StoreLogo { get; set; }
public string StoreLogoPath { get; set; }
public string StoreAddress { get; set; }
public string StoreCity { get; set; }
public string StoreRegion { get; set; }
public string StoreCountry { get; set; }
public virtual Customer Customer { get; set; }
}
StoreUID和StoreNumber都应该是自动生成的字段。下面是插入新商店时应该如何的例子,但是目前,storeNumber和StoreUID都只返回0。
答案 0 :(得分:0)
这实际上不是实体框架功能。 EF需要知道这些列类型以生成适当的SQL。您需要的是从数据库中实际实现的内容。对于Model First,我通过修改EF附带的T4模板来编写适当的SQL来获得自动生成的int Id功能,但它确实是数据库功能。 StoreNumber是一个不同的案例,因为SQL Server只允许一个标识列。
对于您的数据库,您的StoreUID列规范应为:
StoreUID uniqueidentifier not null DEFAULT newid()
您没有指定您是先处理模型还是先处理代码,或者您是否正在构建新内容,因此您可能需要修改现有表格。
修改强>
如果您首先使用模型,请确保在模型中Store Generated Column
设置为Identity
,以便StoreUID值由服务器生成。如果没有,并且您并不担心创建GUID的人/创建者,那么为Store
创建默认构造函数,如果您还没有。{1}}。然后在那里添加StoreUID = Guid.NewGuid();
。
对于StoreNumber,SQL Server不支持具有自动递增整数的多个列。您需要研究一些插入策略。
列出了一个号码here和here。基本上使StoreNumber成为StoreID的函数Computed Columns,或使用an independent Sequence:
ALTER TABLE Store DROP COLUMN StoreNumber;
GO
ALTER TABLE Store ADD StoreNumber AS StoreID + 550000;
答案 1 :(得分:0)
您需要在数据库表中添加默认值以生成字段。
ALTER TABLE [dbo].[Store] ADD DEFAULT (newid()) FOR [StoreUID]
ALTER TABLE [dbo].[Store] ADD DEFAULT (myfuncthatreturnsanint()) FOR [StoreNumber]