Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 实体框架代码首先使用表函数创建复杂约束_Sql Server_Entity Framework_Ef Code First_Ef Code First Mapping - Fatal编程技术网

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)
)