删除mvc4中实体框架表字段中的主键

时间:2013-08-09 12:11:51

标签: asp.net-mvc asp.net-mvc-4

我已经使用Id和DocumentId属性创建了一个名为Sample的模型。在此我没有提到Id属性的主键。但是当我在实体框架中创建Sample as table时它形成了主键。我想删除Id的主键。我需要做什么。请帮我。我是mvc4的新手。

public class Sample
{
[Required,DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Id { get; set; }
[Required]
public int DocumentId { get; set; }
}

public override void Up()
{
CreateTable(
"dbo.Samples",
c => new
{
Id = c.Int(nullable: false, identity: false),
DocumentId = c.Int(nullable: false),
})
.PrimaryKey(t => t.Id);

}

3 个答案:

答案 0 :(得分:2)

我把它放在这里,因为我不认为它会在评论中表现得很好:)。

如果用户具有多个角色(并且每个角色可能由许多用户播放),则您将有三个表链接到两个类。这些表将是一个Users表,其中包含唯一的UserId列和其余的用户详细信息。另一个表是具有唯一RoleId的角色和其余的角色信息以及具有用户id和他所扮演角色的id的连接表(该表可以具有其自身的唯一ID)。如果用户有2个角色,则他们在连接表中将有2个记录,每个角色一个。这些类看起来像这样:

public class User{
    public long UserId {get;set;}
    public ICollection<Role> roles{get;set;}
    //Other properties of the user name, DOb,etc.
}

public class Role{
    public long RoleId{get;set;}
    public ICollection<User> Users{get;set;}
    //other properties of Role
}

这是一对多关系。当然,如果角色可以由一个用户播放,你也可以将它作为一对多的关系。在这种情况下,您不需要连接表,只需将UserId列添加到Role表,而不是用户集合,该角色将具有user类型的单个属性(除非您想要导航,否则不需要从角色回到用户)。

答案 1 :(得分:0)

尝试在您的ID中添加NotMapped属性。

public class Sample
{
[Key]
public int SampleId {get;set;}
[Required,DatabaseGenerated(DatabaseGeneratedOption.None)]
[NotMapped]
public int Id { get; set; }
[Required]
public int DocumentId { get; set; }
}

编辑: 我添加了一个键属性来指定您的主键。

你也可以试试这个,我觉得更好:

public class Sample
{
public int SampleId {get;set;}
public virtual ICollection<Document> Documents {get;set;}
}

public class Document 
{
public int DocumentId {get;set;}
public int SampleId {get;set;}
public virtual Sample Sample {get;set;}
}

虚拟关键字用于延迟加载。

答案 2 :(得分:0)

打开实体图(.edmx)文件,找到该特定表中的哪个属性是主键。右键单击它并选择“属性”。在属性窗口中,查看StoreGeneratedPattern - Identity的位置?将其更改为none并保存图表。它将自行重新生成.cs模型文件