Cha*_*bub 44 entity-framework entity-framework-core .net-core asp.net-core asp.net-core-1.0
考虑两个班级.
public class File
{
[Key]
public string Id { get; set; }
public string Message_Id { get; set; }
internal Message Message { get; set; }
}
public class Message
{
[Key]
public string Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在EF6中,对于N:1..0关系,有一个流畅的API.
modelBuilder.Entity<File>()
.HasOptional(e => e.Message ).WithMany().HasForeignKey(e => e.Message_Id);
Run Code Online (Sandbox Code Playgroud)
在Entiity Framework Core 1中有什么相同的东西?
谢谢
oct*_*ccl 67
您将在EF 7中找不到等效方法.按照惯例,CLR类型可以包含的属性null将被配置为可选.那么决定关系是否可选的原因是FK属性是否可以为空.
总之,由于您的Message_Id FK属性string,它已经接受了null值,因此如果您使用以下Fluent Api配置:
modelBuilder.Entity<File>()
.HasOne(s => s.Message)
.WithMany()
.HasForeignKey(e => e.Message_Id)
Run Code Online (Sandbox Code Playgroud)
EF会将您的关系配置为可选(或根据要求提供N:0..1).
如果你的FK属性是值类型int,你应该将它声明为nullable(int?).
另外我注意到你现在有一个带internal访问修饰符的导航属性.您应该始终将实体属性声明为public.
pkE*_*xec 17
要添加到接受的答案中,如果您的属性无法配置为可为空(例如,如果您正在处理拆分表场景,其中该属性是主键),则添加IsRequired(false), 将使连接可选(LEFT )。
像这样:
modelBuilder.Entity<File>()
.HasOne(s => s.Message)
.WithMany()
.HasForeignKey(e => e.Message_Id)
.IsRequired(false)
Run Code Online (Sandbox Code Playgroud)
在EF Core中,可以使用两种方式关联两个表:
内部OnModelCreating:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<File>()
.HasOne(c => c.Message)
.WithOne()
.HasForeignKey(c => c.MessageId)
}
Run Code Online (Sandbox Code Playgroud)创建新类FileConfiguration并在内部调用它OnModelCreating:
public class FileConfiguration : IEntityTypeConfiguration<File>
{
public void Configure(EntityTypeBuilder<File> builder)
{
builder.ToTable("File");
// Id
builder.HasKey(c => c.Id);
builder.Property(c => c.Id)
.ValueGeneratedOnAdd();
// Message
builder.HasOne(c => c.Message)
.WithOne(c => c.File)
.HasForeignKey<Message>(c => c.MessageId)
.OnDelete(DeleteBehavior.Restrict);
}
}
Run Code Online (Sandbox Code Playgroud)
并在OnModelCreating内部放置以下代码:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.ApplyConfiguration(new FileConfiguration());
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
23228 次 |
| 最近记录: |