gpt4 book ai didi

entity-framework - EF CF : many-to-many relation with additional info

转载 作者:行者123 更新时间:2023-12-01 08:18:10 25 4
gpt4 key购买 nike

我们有遗留数据库,我们将新对象和 Prop 映射到旧表和列。到现在为止还挺好。我们有成功映射的多对多关系。中间表包含附加数据。当我们尝试将中间表映射到一个对象时,我们会得到映射已经定义的异常。如果我们从关系的任何一侧删除映射,我们就会得到表丢失的错误(ofc,我们期望就是这样)。我可以使用 NHibernate 轻松做到这一点,而且我开始认为 EF 确实缺少很多功能。所以,请告诉我我错了,我们可以用 EF 做到这一点。

此致

编辑:这是一个失败的虚拟样本。

class User
{
public ICollection<User> Followers{get;set;}
}

class UserRelation
{
public User User{get;set;}
public User Follower{get;set;}
public DateTime CreatedOn{get;set;}
}

用户映射
modelBuilder
.Entity<User>()
.HasMany<User>(user => user.Followers)
.WithMany()
.Map(m =>m.MapLeftKey("user_id").MapRightKey("follower_id")
.ToTable("user_follower"));

用户关系映射
modelBuilder
.Entity<UserRelation>()
.ToTable("user_follower");

modelBuilder
.Entity<UserRelation>()
.HasOptional<User>(f => f.User)
.WithRequired().Map(m => m.MapKey("user_id"));

modelBuilder
.Entity<UserRelation>()
.HasOptional<User>(f => f.Follower)
.WithRequired().Map(m => m.MapKey("follower_id"));

modelBuilder
.Entity<UserRelation>()
.Property(entity => entity.CreatedOn)
.HasColumnName("created_on");

异常(exception)

指定的架构无效。错误:
(67,6):错误 0019:已定义架构为“dbo”和表“user_follower”的实体集“UserUser”。每个 EntitySet 必须引用唯一的架构和表。

Edit2:这是这个模型的另一个例子: http://learnentityframework.com/LearnEntityFramework/tutorials/many-to-many-relationships-in-the-entity-data-model/

最佳答案

仅当联结表仅包含外键时,直接多对多映射才可用。如果您想在联结表中公开其他属性,您必须将其映射到单独的实体,并从多对多中使用的前实体映射两个一对多关系。

我实际上无法为您编写代码,因为我不了解您的示例。

仅尝试(不要在用户中映射多对多):

modelBuilder.Entity<UserRelation>
.HasRequired(r => r.User)
.WithMany(u => u.Followers);

modelBuilder.Entity<UserRelation>
.HasRequired(r => r.Follower)
.WithMany();

关于entity-framework - EF CF : many-to-many relation with additional info,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5391679/

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