在db中插入一个条目 - 避免时间段重叠

时间:2017-07-11 17:19:44

标签: c#

我正在与这个相当复杂的问题作斗争,比如一个月。非常感谢任何帮助...

我需要在此表中插入一个条目(=技术人员列表):table。在表格下方是点击添加新记录后出现的编辑对话框。

添加新技术人员的条件:

  • 它必须有唯一的Kod Technika(技术人员代码),允许值:int from 1-999
  • 它必须具有唯一的有效间隔Registrace Od(Registration From,datetime2(3)format,NOT NULL)-Registrace Do(Registration To,datetime2(3)format,NULL),
  • 它不能存在具有相同技术人员代码的一名技术人员,即= 7且有效间隔,其与同一技术人员的另一间隔重叠 - >你可以在table图片
  • 中看到

问题现在出现了:

  • 我找不到解决方案如何检查时间间隔不要重复!因为注册为空时解决方案不起作用。感谢任何帮助

我试图在Create ActionResult中的控制器中描述它。在变量inseminacniTechnikDb中,我尝试查找技术人员是否已经存在,但它现在可以100%工作

    [Permission]
    [AcceptVerbs(HttpVerbs.Post)]
    public async Task<ActionResult> InseminacniTechnikCreate([DataSourceRequest] DataSourceRequest request, InseminacniTechnikViewModel inseminacniTechnikViewModel)
    {
        using (dbSkotEntities db = new dbSkotEntities())
        {
            var inseminacniTechnikDb = db.jme_InseminacniTechnik
            .FirstOrDefault(x => x.KodIT == inseminacniTechnikViewModel.KodIT
            && ((inseminacniTechnikViewModel.RegistraceOd < x.RegistraceOd || inseminacniTechnikViewModel.RegistraceOd > x.RegistraceDo) && (inseminacniTechnikViewModel.RegistraceDo < x.RegistraceOd || inseminacniTechnikViewModel.RegistraceDo > x.RegistraceDo)));

            if (inseminacniTechnikDb == null)
            {
                ModelState.AddModelError("KodIT", resJmenovky.inseminacniTechnikInsertError);
            }

            if (inseminacniTechnikViewModel != null && ModelState.IsValid && inseminacniTechnikDb != null)
            {
                inseminacniTechnikService.Create(inseminacniTechnikViewModel);
            }
        }

        return Json(await new[] { inseminacniTechnikViewModel }.ToDataSourceResultAsync(request, ModelState));
    }

按照我的cshtml代码,我正在使用Telerik ASP-NET MVC UI网格:

@(Html.Kendo().Grid<eSkotWeb.Models.InseminacniTechnikViewModel>()
    .Name("grid")
    //.AutoBind(true)
    .Columns(columns =>
    {
        columns.Command(command => { command.Custom("pdf").Click("ExportToPdf")/*.Action("ExportToPdf", "Jmenovky")*/; }).Title("PDF Export");
        columns.Bound(p => p.KodIT);
        columns.Bound(p => p.TitulPred);
        columns.Bound(p => p.Jmeno);
        columns.Bound(p => p.Prijmeni);
        columns.Bound(p => p.TitulZa);
        columns.Bound(p => p.RegistraceOd);
        columns.Bound(p => p.RegistraceDo);
        //columns.Bound(p => p.OrganizaceInsId);
        //columns.Bound(p => p.StrediskoInsId);
        columns.Bound(p => p.Poznamka);
        columns.Command(command => { command.Edit(); command.Destroy(); }).Title("Upravit / Smazat");
    })
    .DataSource(dataSource => dataSource
        .Ajax()
        .Events(events => events
            .Error("error_handler")
            .Change("onRequestEnd")
        )
        .Model(model =>
        {
            model.Id(p => p.Id);
            model.Field(p => p.Id).Editable(false);
        })
        .Read(read => read.Action("InseminacniTechnikRead", "Jmenovky").Type(HttpVerbs.Post))
        .Create(create => create.Action("InseminacniTechnikCreate", "Jmenovky").Type(HttpVerbs.Post))
        .Update(update => update.Action("InseminacniTechnikUpdate", "Jmenovky").Type(HttpVerbs.Post))
        .Destroy(destroy => destroy.Action("InseminacniTechnikDestroy", "Jmenovky").Type(HttpVerbs.Post))
        .PageSize(10)
        .Sort(sort => sort.Add("KodIT").Ascending())
    )
    .Editable(editable => editable.Mode(GridEditMode.PopUp).Window(x => x.Width(500)).DisplayDeleteConfirmation(true))
    .Filterable(filter => filter.Mode(GridFilterMode.Menu))
    .NoRecords("Žádný záznam nebyl nalezen...")
    .Pageable(b => b
        .ButtonCount(5)
        .PageSizes(new[] { 5, 10, 20, 50 })
        .Refresh(true)
    )
    .Sortable(sortable => sortable.AllowUnsort(true).SortMode(GridSortMode.MultipleColumn))
    .ToolBar(toolBar => toolBar.Create())
)

@Html.ModalDialog("modalWarning", "Varování", null, new List<dialogButton>
{
    new dialogButton() {caption = "Ok", id = "okButton", cssClass = "btn btn-primary btn-sm", dismiss = true}
}, "errMsg", webUIDialogType.warning, webUIDialogSize.middle)

<script>
function error_handler(e) {
    if (e.errors) {
        var message = "";
        // Create a message containing all errors.
        $.each(e.errors, function (key, value) {
            if ('errors' in value) {
                $.each(value.errors, function () {
                    message += this + "\n";
                });
            }
        });
        // Display the message.
        showErrDialog(message);
    }
}

function showErrDialog(message) {
    var dlg = $('#modalWarning');
    var msg = $('#errMsg', dlg);
    msg.html(message);
    dlg.modal('show');
}
</script>

数据存储在MsSql Db中。 Db表定义如下:

CREATE TABLE [dbo].[jme_InseminacniTechnik](
[Id] [int] IDENTITY(1,1) NOT NULL,
[PlatnostOd] [datetime2](3) NOT NULL,
[RowVersion] [timestamp] NOT NULL,
[KodIT] [int] NOT NULL,
[RegistraceOd] [date] NOT NULL,
[RegistraceDo] [date] NULL,
[Prijmeni] [varchar](max) NULL,
[Jmeno] [varchar](max) NULL,
[TitulPred] [varchar](max) NULL,
[TitulZa] [varchar](max) NULL,
[OrganizaceInsId] [int] NULL,
[StrediskoInsId] [int] NULL,
[Poznamka] [varchar](max) NULL,
CONSTRAINT [pk_InseminacniTechnik] PRIMARY KEY CLUSTERED 
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

ALTER TABLE [dbo].[jme_InseminacniTechnik] ADD  CONSTRAINT [DF_jme_InseminacniTechnik_PlatnostOd]  DEFAULT (getdate()) FOR [PlatnostOd]
GO

ALTER TABLE [dbo].[jme_InseminacniTechnik]  WITH CHECK ADD  CONSTRAINT [fk_InseminacniTechnik_OpravnenaOrganizaceId] FOREIGN KEY([OrganizaceInsId])
REFERENCES [dbo].[jme_OpravnenaOrganizace] ([Id])
GO

ALTER TABLE [dbo].[jme_InseminacniTechnik] CHECK CONSTRAINT [fk_InseminacniTechnik_OpravnenaOrganizaceId]
GO

ALTER TABLE [dbo].[jme_InseminacniTechnik]  WITH CHECK ADD  CONSTRAINT [fk_InseminacniTechnik_StrediskoInsId] FOREIGN KEY([StrediskoInsId])
REFERENCES [dbo].[cis_Stredisko] ([Id])
GO

ALTER TABLE [dbo].[jme_InseminacniTechnik] CHECK CONSTRAINT [fk_InseminacniTechnik_StrediskoInsId]
GO

0 个答案:

没有答案