在mvc5中自动生成使用EF

时间:2017-08-30 06:26:44

标签: sql asp.net-mvc entity-framework auto-generate

我有一个连接到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。

enter image description here

2 个答案:

答案 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不支持具有自动递增整数的多个列。您需要研究一些插入策略。

列出了一个号码herehere。基本上使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]