繁体   English   中英

ASP.Net MVC C#模型与另一个模型的多个实例?

[英]ASP.Net MVC C# model with multiple instances of another model?

我正在尝试建立一个系统,使工程师能够提出请求,支持人员可以将请求分配给自己,这样,当有人尝试在网站上显示请求时,与创建请求的人的名字和分配请求的人的名字一起显示。

我的模特:

public class ConfigurationRequest
{
public virtual int     RequestId { get; set; }
public virtual int     UserId { get; set; }
public virtual int     RequestNumber { get; set; }
public virtual string  ReqDesc { get; set; }
}

public class User
{
public virtual int     UserId { get; set; }
public virtual string  UserRole {get; set; }
public virtual string  UserName {get; set; }
public virtual ICollection(ConfigurationRequest) ConfigurationReuquest { get; set; }
}

对于每个配置请求,我想在浏览器中显示如下内容:

请求编号:2864965

募集人(所有者):Dave Johnson

目前分配给:Mike Clarke

需求描述:燃油平衡系统中需要的新点

当两次引用相同的类时,您将需要帮助实体框架找出如何匹配FK。 您可以使用注释或流利的代码。

public class ConfigurationRequest
{
    public int RequestId { get; set; }
    public int RequestNumber { get; set; }
    public string ReqDesc { get; set; }
    // EF will pair the below FK to nav by convention. You could also use ForeignKey attribute.
    public int RequestingUserId { get; set; }
    public User RequestingUser { get; set; }
    public int AssignedUserId { get; set; }  // make this int? if it is optional
    public User AssignedUser { get; set; }
}

public class User
{
    public int UserId { get; set; }
    public string UserRole {get; set; }
    public string UserName {get; set; }

    // you need a collection for each relationship. InverseProperty tells EF how to match them to User FK
    [InverseProperty("RequestingUser")]    
    public virtual ICollection<ConfigurationRequest> RequestsRaised { get; set; }
    [InverseProperty("AssignedUser")]    
    public virtual ICollection<ConfigurationRequest> RequestsAssigned { get; set; }
}

或流利的等效语言:

modelBuilder.Entity<ConfigurationRequest>()
  .HasRequired(c => c.RequestingUser)   // or HasOptional()
  .WithMany(p => p.RequestsRaised);

modelBuilder.Entity<ConfigurationRequest>()
  .HasRequired(l => l.AssignedUser)
  .WithMany(p => p.RequestsAssigned);

有关更多信息,请参见此处 另外,请勿在非导航属性上使用virtual非延迟加载的属性。

现在,您可以在控制器中获取请求,使用它来填充视图模型并显示结果:

context.ConfigurationRequests
       .Include(c => c.RequestingUser)
       .Include(c => c.AssignedUser)
       .FirstOrDefault(c => c.RequestId == myRequestId);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM