Sql server 实体框架代码首先使用表函数创建复杂约束
我需要为对象创建一个表Sql server 实体框架代码首先使用表函数创建复杂约束,sql-server,entity-framework,ef-code-first,ef-code-first-mapping,Sql Server,Entity Framework,Ef Code First,Ef Code First Mapping,我需要为对象创建一个表 public class CustomClassifierValue : EntityClassifier { public int Id { get; set; } public string Code { get; set; } public DateTime ValidFrom { get; set; } public DateTime ValidTo { get; set; } } 我需要代码列仅在
public class CustomClassifierValue : EntityClassifier
{
public int Id { get; set; }
public string Code { get; set; }
public DateTime ValidFrom { get; set; }
public DateTime ValidTo { get; set; }
}
我需要代码列仅在ValidTo和ValidFrom日期之间的时间是唯一的
基本上,只要两个对象的ValidFrom和ValidTo日期之间没有共同的日期,就应该能够有两个具有相同代码的对象,但是如果您尝试添加一个对象,并且已经有一个具有相同代码的对象,并且它们的ValidFrom和ValidTo日期重叠,则会抛出一个错误
在实体框架中是否有类似的方法
在SQL中,它看起来像:
CREATE FUNCTION dbo.codeUniqueForGivenDates
(@code [varchar](10),
@dateFrom DateTime,
@dateTo DateTime)
RETURNS tinyint
AS
BEGIN
DECLARE @Result tinyint
IF EXISTS(SELECT * FROM Objects
WHERE Code = @code AND ValidTo > @dateFrom AND ValidFrom < @dateTo)
SET @Result = 0
ELSE
SET @Result = 1
RETURN @Result
END
CREATE TABLE [dbo].[Objects]
(
[Id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
[Code] [nvarchar(max)], NOT NULL,
[ValidFrom] [DateTime], NOT NULL,
[ValidTo] [DateTime], NOT NULL,
CONSTRAINT ckUniqueCode CHECK (dbo.codeUniqueForGivenDates(Code, ValidFrom, ValidTo) = 1)
)