小编Ice*_*urn的帖子

自引用多对多关系

我有一个Ticket实体:

    public class Ticket
    { 
        public int Id { get; set; }
        public string Title { get; set; }

        public virtual ICollection<Relation> RelatedTickets { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

我想在Entity Framework Core中设置多对多自相关,因此我建立了两个一对多关系:

public class Relation
{
    [Required, ForeignKey("TicketFrom")]
    public int FromId { get; set; }

    [Required, ForeignKey("TicketTo")]
    public int ToId { get; set; }

    public virtual Ticket TicketFrom { get; set; }
    public virtual Ticket TicketTo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用流畅的API创建关系:

        builder.Entity<Relation>()
               .HasKey(uc => new { uc.FromId, uc.ToId …
Run Code Online (Sandbox Code Playgroud)

entity-framework-core asp.net-core

6
推荐指数
2
解决办法
2694
查看次数

如何将复杂的linq映射到对象

寻找Ef Core和Linq的一些帮助.让我们说我要求收到所有支持票,包括产品,公司等信息.这很简单,加入的东西:

select * 
from Tickets T
left join Products P on T.ProductId = P.Id                  
left join ProductVersions PV on T.ProductVersionId = PV.Id  
left join TicketTypes TT on T.TicketTypeId = TT.Id          
left join TicketPriorities TP on T.TicketPriorityId = TP.Id 
left join TicketStates TS on T.TicketStateId = TS.Id    

left join AbpTenants A on T.TenantId = A.Id                 
    left join AbpEditions E on A.EditionId = E.Id   

left join TicketLinkedUsers TLU on TLU.TicketId = T.Id      
    left join TicketLinkTypes TLT on TLT.Id = TLU.TicketLinkTypeId  
Run Code Online (Sandbox Code Playgroud)

但是我有最后4个连接的问题. …

c# linq entity-framework automapper .net-core

5
推荐指数
1
解决办法
154
查看次数

PostgreSQL - 类型的自动演员?

我正在努力将数据库从Firebird移植到PostgreSQL,并且有许多与类型转换相关的错误.例如,让我们采取一个简单的功能:

CREATE OR REPLACE FUNCTION f_Concat3 (
  s1 varchar, s2 varchar, s3 varchar
)
RETURNS varchar AS
$body$
BEGIN
   return s1||s2||s3;
END;
$body$ LANGUAGE 'plpgsql' IMMUTABLE CALLED ON NULL INPUT SECURITY INVOKER LEAKPROOF COST 100;
Run Code Online (Sandbox Code Playgroud)

由于Firebird对类型非常灵活,因此这些函数的调用方式不同:某些参数可能是另一种类型:整数/双精度/时间戳.当然在Postgres函数调用中f_Concat3 ('1', 2, 345.345)会导致如下错误:

函数f_Concat3(未知,整数,数字)未找到.

建议使用文档来使用如下的显式转换:

f_Concat3 ('1'::varchar, 2::varchar, 345.345::varchar) 
Run Code Online (Sandbox Code Playgroud)

此外,我可以为所有可能发生的类型组合创建一个函数克隆,它将起作用.解决错误的示例:

CREATE OR REPLACE FUNCTION f_Concat3 (
   s1 varchar, s2 integer, s3 numeric
)
RETURNS varchar AS
$body$
  BEGIN
    return s1::varchar||s2::varchar||s3::varchar;
  END;
Run Code Online (Sandbox Code Playgroud)

然而,这是非常糟糕和丑陋的,它不适用于大功能.

重要提示:我们为所有数据库提供了一个通用代码库,并使用我们自己的语言来创建包含选择查询的应用程序对象(表单,报表等).在函数调用上使用显式强制转换是不可能的,因为我们将失去与其他DB的兼容性.

我感到困惑的是,整型参数不能被浇铸成numericdouble precision,或date/ …

postgresql

3
推荐指数
1
解决办法
3708
查看次数