-1

我以 Sample 的名义创建了一个具有 Id 和 DocumentId 属性的模型。在此我没有提到 Id 属性的主键。但是当我在实体框架中创建 Sample 作为表时,它形成了主键。我想删除 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);

}
4

4 回答 4

2

我把它放在这里是因为我认为它不会很好地出现在评论中:)

如果用户有多个角色(每个角色可能由多个用户扮演),您将拥有三个链接到 2 个类的表。这些表将是具有唯一 UserId 列和其余用户详细信息的用户表。另一个表是具有唯一 RoleId 和其余角色信息的 Roles,以及一个包含用户 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 类型的单个属性(除非您想导航,否则不需要从角色返回到用户)。

于 2013-08-09T12:35:23.747 回答
0

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

于 2013-08-09T13:31:07.210 回答
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;}
}

virtual 关键字用于延迟加载。

于 2013-08-09T12:28:02.057 回答
0

Fluent API 抑制实体框架中的数据注释。Primary 的 Data Annotation 是 [Key],ID 默认是 Primary key with identity。在这种情况下,删除(如果存在)ID 的数据注释 i:e;[KEY] 并在您的上下文类中使用 Fluent API。在下面的示例中,由于 Fluent,我的主键是“CustomerName”。例子:

public class Customer
    {
        public int CustomerName { get; set; }

        public int ID { get; set; }

        [Required]
        public string ProductID { get; set; }

    }

在上下文类中:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
           modelBuilder.Entity<Customer>().HasKey(s => s.CustomerName);   
        }
于 2018-05-12T17:39:02.433 回答