【发布时间】:2016-09-21 19:43:58
【问题描述】:
试图理解这种关系并弄清楚如何使用流利的 api 映射它。
我有三个对象;请求、响应和管理员
一个请求可以有多个响应,来自一个或多个管理员
一个响应可以与一个请求和一个管理员相关联。
管理员可以与许多响应和许多请求相关联
从逻辑上讲,管理员被分配到一个请求,并且可以创建与分配给他们的请求相关联的响应。我意识到架构明智的管理员可以创建对未分配给他们的请求的响应,但这在应用程序中作为业务规则强制执行,除非有一种干净的方式来强制执行我并不真正关心的架构。
到目前为止,我看到的是以下(简化的)对象:
请求:
public class Request {
public Guid Id {get;set;}
public virtual ICollection<Response> Responses {get;set;}
public virtual ICollection<Administrator> Administrators {get;set;}
}
回复:
public class Response {
public Guid Id {get;set;}
public virtual Request { get;set;}
public virtual Administrator { get;set;}
}
管理员:
public class Administrator {
public Guid Id {get;set;}
public virtual ICollection<Request> Requests {get;set;}
public virtual ICollection<Response> Responses {get;set;}
}
我觉得这比我想象的要简单。但是,如果有人可以帮助我为此翻译流畅的 api 映射,那就太好了! :)
编辑:
一直在摆弄这个,我想我可能已经确定了一个解决方案:
响应有两个必需的请求和管理员映射
public class Response: EntityTypeConfiguration<Response>
{
public ResponseMap()
{
HasKey(response => response.Id);
HasRequired(e => e.Request);
HasRequired(e => e.Administrator);
}
}
请求与响应具有多对一关系,与具有关系表的管理员具有多对多关系:
public class RequestMap : EntityTypeConfiguration<Request>
{
public RequestMap()
{
HasKey(r => r.Id);
HasMany(e => e.Responses)
.WithRequired(e => e.Request)
.WillCascadeOnDelete(false);
HasMany(or => or.Administrators)
.WithMany(p => p.Requests)
.Map(mc =>
{
mc.ToTable("RequestAdministrator");
mc.MapLeftKey("RequestId");
mc.MapRightKey("AdministratorId");
});
}
}
并且管理员与响应具有多对一的关系。它也与请求有关系,但在上面的映射中定义。
public class AdministratorMap : EntityTypeConfiguration<Administrator>
{
public AdministratorMap()
{
HasKey(e => e.Id);
HasMany(p => p.Responses)
.WithRequired(o => o.Administrator)
.WillCascadeOnDelete(false);
}
}
我不能 100% 确定这是正确的做法,但乍一看似乎很合适。
【问题讨论】:
标签: c# entity-framework ef-fluent-api