Gil*_*lit 91 entity-framework code-first entity-framework-ctp5
我正在创建一个POCO模型,首先使用实体框架代码CTP5.我正在使用装饰来创建PK列的属性映射.但是如何在多个列上定义PK,具体来说,如何控制索引中列的顺序?这是班级中属性顺序的结果吗?
谢谢!
Sla*_*uma 148
您可以在属性中指定列顺序,例如:
public class MyEntity
{
[Key, Column(Order=0)]
public int MyFirstKeyProperty { get; set; }
[Key, Column(Order=1)]
public int MySecondKeyProperty { get; set; }
[Key, Column(Order=2)]
public string MyThirdKeyProperty { get; set; }
// other properties
}
Run Code Online (Sandbox Code Playgroud)
如果您使用a的Find
方法,则DbSet
必须考虑此关键参数的顺序.
Mor*_*avi 52
要完成Slauma提交的正确答案,您还可以使用HasKey方法指定复合主键的顺序:
public class User
{
public int UserId { get; set; }
public string Username { get; set; }
}
public class Ctp5Context : DbContext
{
public DbSet<User> Users { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<User>().HasKey(u => new
{
u.UserId,
u.Username
});
}
}
Run Code Online (Sandbox Code Playgroud)
在EF Core 7.0[PrimaryKey]
中,引入了类的新属性。
例子:
[PrimaryKey(nameof(FirstName),nameof(LastName))]
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string SomeProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这样,您就不必再次使用 Fluent-api。
如果像我一样,你更喜欢使用配置文件,你可以这样做(基于Manavi的例子):
public class User
{
public int UserId { get; set; }
public string Username { get; set; }
}
public class UserConfiguration : EntityTypeConfiguration<User>
{
public UserConfiguration()
{
ToTable("Users");
HasKey(x => new {x.UserId, x.Username});
}
}
Run Code Online (Sandbox Code Playgroud)
显然,您必须将配置文件添加到您的上下文中:
public class Ctp5Context : DbContext
{
public DbSet<User> Users { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new UserConfiguration());
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
54191 次 |
最近记录: |