实体框架6 - >具有多个键的通用DbSet.Find方法

时间:2018-05-15 11:11:52

标签: c# entity-framework generics entity-framework-6

我正在编写一个应用程序,我们调用20多个API来使用Entity Framework在我们的数据库中添加或更新值。模型的键可以在1-6个属性之间变化。我已经编写了一个添加或更新的通用方法,以避免重复代码,但我用几个键动态调用Angular CLI: 6.0.1 Node: 8.11.1 OS: win32 x64 Angular: 6.0.1 ... animations, cli, common, compiler, compiler-cli, core, forms ... http, platform-browser, platform-browser-dynamic ... platform-server, router Package Version ------------------------------------------------------ @angular-devkit/architect 0.6.1 @angular-devkit/core 0.6.1 @angular-devkit/schematics 0.6.1 @ngtools/webpack 6.0.0 @schematics/angular 0.6.1 @schematics/update 0.6.1 rxjs 5.5.2 typescript 2.8.3 webpack 4.8.3 。如果每个模型具有相同数量的密钥,那么这将不是问题,但遗憾的是并非如此。

示例模型:

DbSet.Find()

API调用:

public class TPClassification
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public Classifications ClassificationId { get; set; }

    [MaxLength(100)]
    public string Description { get; set; }

    public bool IsCyclical { get; set; }

    [MaxLength(400)]
    public string Comment { get; set; }
}

public class TPFeeCalculation
{
    [Key, Column(Order = 0)]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    [MaxLength(15)]
    public string BusinessSystemId { get; set; }

    [Key, Column(Order = 1)]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int CaseId { get; set; }

    [ForeignKey("BusinessSystemId,CaseId")]
    public virtual TPCase TPCase { get; set; }

    [Key, Column(Order = 2)]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    [MaxLength(5)]
    public string Action { get; set; }

    [Key, Column(Order = 3)]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int Cycle { get; set; }

    [ForeignKey("BusinessSystemId,CaseId,Action,Cycle")]
    public virtual TPRenewalCycle TPRenewalCycle { get; set; }

    [Key, Column(Order = 4)]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int RateNo { get; set; }

    [MaxLength(100)]
    public string RateDescription { get; set; }
}

AddOrUpdate方法:

public ICollection<TPFeeCalculation> GetFeeCalculation(string businessSystemId, int caseId)
{
    var url = $"/api/feecalculations/{businessSystemId}/{caseId}";
    var result = GetRequest<ICollection<TPFeeCalculation>>(url);
    return result;
}

public ICollection<TPClassification> GetClassifications()
{
    var url = $"/api/classifications/";
    var result = GetRequest<ICollection<TPClassification>>(url);
    return result;
}

0 个答案:

没有答案