ASP.NET MVC - 外键作为主键?
是否有可能有一个外键作为主键? 如果是这样,有人可以帮我用我的代码?ASP.NET MVC - 外键作为主键?
<Key()>
Public Property AssignmentID() As Integer
<ForeignKey("AssignmentID")>
Public Overridable Property Assignment As Assignment
Public Overridable Property User As User
对于上面我的代码得到一个错误:
One or more validation errors were detected during model generation:
System.Data.Edm.EdmAssociationEnd: : Multiplicity is not valid in Role 'AssignmentLocks_Assignment_Source' in relationship 'AssignmentLocks_Assignment'. Because the Dependent Role refers to the key properties, the upper bound of the multiplicity of the Dependent Role must be �1�.
我试图创建具有一个(或无)每分配记录的表。
如果您试图创建一个每个任务都有一个(或没有)记录的表,那么您如何在该表中为多行赋予唯一的AssignmentID?您应该创建一个具有唯一AssignmetnID的表,然后为每个分配的多个记录分配AssignmetnRecordID。
示例代码在C#中,因为我更熟悉C#语法。
,你应该建立一个数据模型是这样的,
public class xyz
{
public int AssignmentID { get; set; }
// Some other properties
[ForeignKey("AssignmetnRecordID")]
public virtual ICollection<Assignment> AssignmentRecords { get; set; }
}
它应该是不够的,只是补充分配的属性(对不起C#语法):
public class Xyz
{
public int XyzID { get; set; }
public int AssignmentId { get; set; }
[ForeignKey("AssignmentId")]
public virtual Assignment Assignment { get; set; }
}
public class Assignment
{
public int AssignmentID { get; set; }
}
XyzID和AssignmentID会可能不一样,但它只允许0或1个赋值。
我想我是以这种错误的方式去做的。多谢你们。 – Tom
是的,这是可能的。一个常见的例子是在两个表之间实现多对多关系的表。例如,角色和用户将具有多对多的关系,并且这两个ID的组合将成为一个很好的主键。 诀窍是DatabaseGenerate属性,它允许您告诉EF您将为身份诠释字段的情况生成密钥的值,而不是数据库。
public class RoleUsers
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None), Column(Order = 0)]
public int RoleId { get; set; }
public virtual Role Role { get; set; }
[Key, DatabaseGenerated(DatabaseGeneratedOption.None), Column(Order = 1)]
public Guid UserGuid { get; set; }
}
然而,在你的情况,你想有一个0或1的关系,所以你应该
public class MyClass
{
public int Id { get; set; }
public int? AssignmentId { get; set; }
public virtual Assignment Assignment { get; set; }
...
}
可空INT(INT?)允许0或一个关系,生成列可为空。如果它只是int,那么该列不能为空,并且必须有一个关联的Assignement。
这与MVC无关。 –