2016-11-23 35 views
0

我有以下表:问题使用MVC 4创建多到许多与有效载荷关系VB.net

enter image description here

用户具有一个ROLS许多一对多的关系,但在中间表有有效负载字段,正如你所看到的,外键和中间表不遵循名称约定。我无法更改数据库,因为用于其他系统。

我创建了以下型号:

<Table("RolsUsers")> 
Public Class RolUser 
    <Column("System")> 
    Public Property SystemID As Integer 
    <Column("Rol")> 
    Public Property RolID As Integer 
    <Column("User")> 
    Public Property UserID As Integer 
    Public Property Created As Date 

    Public Overridable Property Users As ICollection(Of User) 
    Public Overridable Property Rols As ICollection(Of Rol) 
End Class 

Public Class User 
    Public Property ID As Integer 
    Public Property Name As String 

    Public Overridable Property RolsUsers As ICollection(Of RolUser) 
End Class 

Public Class Rol 
    Public Property ID As Integer 
    Public Property Name As String 

    Public Overridable Property RolsUsers As ICollection(Of RolUser) 
End Class 

有一次,我把这个行:

Dim user = db.User.FirstOrDefault(Function(u) u.Name.Equals(username, StringComparison.CurrentCultureIgnoreCase) 

我只得到了用户数据,并且重写属性RolsUser是空的(例外)。我认为rols和用户之间的联系并不顺利。我新使用VB的mvc,所以任何帮助是值得欢迎的。

回答

0

我解决了我的问题。

事实证明,加入表模型需要为每个模型(表)的简单重写属性它指向,而重写ICOllections去只在独立表款:

<Table("RolsUsers")> 
Public Class RolUser 
    <Column("System")> 
    Public Property SystemID As Integer 
    Public Overridable Property System As System 

    <Column("Rol")> 
    Public Property RolID As Integer 
    Public Overridable Property Rol As Rol 

    <Column("User")> 
    Public Property UserID As Integer 
    Public Overridable Property Users As User 

    Public Property Created As Date 
End Class 

Public Class User 
    Public Property ID As Integer 
    Public Property Name As String 

    Public Overridable Property RolsUsers As ICollection(Of RolUser) 
End Class 

Public Class Rol 
    Public Property ID As Integer 
    Public Property Name As String 

    Public Overridable Property RolsUsers As ICollection(Of RolUser) 
End Class 

这样,可以将几个属性添加到中间表模型中,并获得多对多关系。

注释更改数据库表中使用的列的名称。