需要在2个集合字段上创建唯一约束

时间:2017-04-27 15:25:26

标签: codefluent

场景:正在创建一个将由40多所学校使用的时间跟踪/打卡系统。由于会计处理工资单的方式,员工必须估计他们将在工资期结束时工作的小时数。此外,每个学校的每个工资期必须输入其员工必须估算工资期剩余时间的日期。

论文是与我的问题相关的实体:

  • 学校
  • PayPeriod
  • PayPeriodEstimateHoursSchedule

我想要实现的目标

  1. 最重要的是,我需要确保为 PayPeriodEstimateHoursSchedule一所学校无法输入2条记录 相同的工资期。

  2. 如果可能,我想创建一个名为的方法 可以从单个实体调用的LoadBySchoolAndPayPeriod 而不是集合实体。

  3.   

    PayPeriodEstimateHoursSchedule.LoadBySchoolAndPayPeriod(bmiSchool,       currentPayPeriod)

    而不是

      

    PayPeriodEstimateHoursScheduleCollection.LoadBySchoolAndPayPeriod(bmiSchool,   currentPayPeriod)

      <cf:entity name="School" namespace="DemoCompositeKey">
        <cf:property name="Id" key="true" />
        <cf:property name="Name" />
      </cf:entity>
      <cf:entity name="PayPeriod" namespace="DemoCompositeKey">
        <cf:property name="Id" key="true" />
        <cf:property name="StartDate" typeName="date" />
        <cf:property name="EndDate" typeName="date" />
      </cf:entity>
      <cf:entity name="PayPeriodEstimateHoursSchedule" namespace="DemoCompositeKey">
        <cf:property name="Id" key="true" />
        <cf:property name="Date" typeName="date" />
        <cf:property name="PayPeriod" typeName="{0}.PayPeriod" />
        <cf:property name="School" typeName="{0}.School" />
      </cf:entity>
    

1 个答案:

答案 0 :(得分:1)

第一个解决方案是使用uniqueConstraintNames attribute

<cf:entity name="PayPeriodEstimateHoursSchedule" namespace="DemoCompositeKey">
  <cf:property name="Id" key="true" />
  <cf:property name="Date" typeName="date" />
  <cf:property name="PayPeriod" typeName="{0}.PayPeriod" uniqueConstraintNames="UC1" />
  <cf:property name="School" typeName="{0}.School" uniqueConstraintNames="UC1" />
</cf:entity>

或定义复合键:

<cf:entity name="PayPeriodEstimateHoursSchedule" namespace="DemoCompositeKey">
  <cf:property name="Date" typeName="date" />
  <cf:property name="PayPeriod" typeName="{0}.PayPeriod" key="true" />
  <cf:property name="School" typeName="{0}.School" key="true" />
</cf:entity>

关于该方法,您可以创建CFQL方法:

LOADONE(School, PayPeriod) WHERE School = @School AND PayPeriod = @PayPeriod