gpt4 book ai didi

c# - Entity Framework - 如何在一侧映射所需属性而另一侧没有导航属性

转载 作者:太空宇宙 更新时间:2023-11-03 23:22:32 25 4
gpt4 key购买 nike

我有以下两个 POCO(ProductUser)和一个复杂类型(Tracking)。

class Product() {

Guid Id { get; protected set; }
Tracking TrackingInfo { get; protected set; }

// Some other properties
}


class User() {

Guid Id { get; protected set; }

// Some other properties
}


class Tracking() {

User CreatedBy { get; protected set; }
Guid CreatedById { get; protected set; }

// Some other properties
}

跟踪类是跟踪信息的包装器,包含其他跟踪属性(创建日期、更新日期等)并实现用于其他目的的接口(interface),但目前我关心的是映射产品 TrackingInfo 之间的关系。和 User .

每个 Product必须有关联的 User映射到 TrackingInfo.CreatedBy属性(property)。

要注意的是,我不想在返回产品的用户上创建导航属性 - 即我不想有一个 ICollection<Product> ProductsCreated属性(property)。

我不确定在 EntityFramework Code First 中应该如何完成关系或复杂类型映射。我有一个映射类如下:

public class ProductMap : EntityTypeConfiguration<Product>
{
public ProductMap()
{
this.Property(t => t.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity).HasColumnName("Id");

// Complex type mapping here?
}

}

我怎么能

  1. 映射 TrackingInfo 复杂类型
  2. 映射 CreatedBy -> User 单向关系?

最佳答案

复杂类型不能包含导航属性。我建议创建一个包含 Tracking 属性及其配置的抽象基类:

public abstract class Tracking
{
public Guid CreatedById { get; set; }
public virtual User CreatedBy { get; set; }
}

public abstract class TrackingConfig<T> : EntityTypeConfiguration<T> where T: Tracking
{
public TrackingConfig()
{
HasRequired( t => t.CreatedBy )
.WithMany()
.HasForeignKey( t => t.CreatedById );
}
}

public class Product : Tracking
{
public Guid Id { get; set; }
}

public class ProductConfig : TrackingConfig<Product>
{
public ProductConfig()
{
}
}

...

    protected override void OnModelCreating( DbModelBuilder modelBuilder )
{
base.OnModelCreating( modelBuilder );

modelBuilder.Configurations.Add( new ProductConfig() );

关于c# - Entity Framework - 如何在一侧映射所需属性而另一侧没有导航属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34918364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com