gpt4 book ai didi

c# - Entity Framework 中不同项目之间 EntityTypeConfiguration 的继承

转载 作者:太空宇宙 更新时间:2023-11-03 12:46:19 27 4
gpt4 key购买 nike

我有一个“主”Visual Studio 项目,其中包含类似于以下内容的 Entity Framework 映射:

public class UserMap : EntityTypeConfiguration<User>
{
public UserMap()
{
// Table Mapping
ToTable("Users");
this.Property(x => x.Username).HasColumnName("Username");


// Other mapping goes here
}
}

User被映射的实体只是一个简单的 POCO:

 public class User {
public string Username { get; set; }

// Other properties omitted for brevity
}

我有第二个“子”VS 项目/应用程序(引用主项目),它具有以下 ExtendedUser也使用 EF 映射的实体/POCO:

public class ExtendedUser : User {

// Extra navigation properties
public ICollection<Order> Orders { get; set; }
}

这个实体没有额外的字段,但确实有各种特定于该应用程序且仅该应用程序的关系集合。

我的问题是我想继承为 User 定义的映射在第一个 VS 项目中。师傅User类将在其他几个项目中使用,因此我需要避免任何重复映射。

如果我将映射定义为:

public class ExtendedUserMap : UserMap
{
public UserMap()
{

}
}

然后我不能引用任何 ExtendedUser属性,因为映射的类型是 EntityTypeConfiguration<User>不是 EntityTypeConfiguration<ExtendedUser> .

显然我不能继承两个类,所以我不确定是否有合适的方法来实现我想做的事情。

如何定义 ExtendedUserMap这样我就可以使用 User映射,还包括 ExtendedUser 的导航属性?

最佳答案

您可以稍微不同地定义您的基映射类:

public abstract class UserMapBase<TUser> : EntityTypeConfiguration<TUser>
where TUser : User
{
protected UserMapBase()
{
// Table Mapping
ToTable("Users");
this.Property(x => x.Username).HasColumnName("Username");


// Other mapping goes here
}
}

现在你可以有一个这样的子类:

public class UserMap : UserMapBase<User>
{ }

public class ExtendedUserMap : UserMapBase<ExtendedUser>
{
public ExtendedUserMap()
{
// map ExtendedUser properties here.
}
}

关于c# - Entity Framework 中不同项目之间 EntityTypeConfiguration 的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37196597/

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