gpt4 book ai didi

c# - EF Core 中是否可能需要单向导航属性?

转载 作者:行者123 更新时间:2023-12-04 15:20:38 33 4
gpt4 key购买 nike

我正在开发一个基本的群聊系统,为此我创建了这些类:

public class Role
{
public Guid Id { get; set; };
public string Username { get; set; }
}

public class Message
{
public Guid Id { get; set; };
public Role Author { get; set; }
public Conversation Conversation { get; set; }
public DateTime Date { get; set; }
public string Text { get; set; }
}

public class Conversation
{
public Guid Id { get; set; };
public IList<ConversationParticipant> ConversationParticipants { get; set; };
public IList<Message> Messages { get; set; };
}

public class ConversationParticipant
{
public Conversation Conversation { get; set; }
public Role Role { get; set; }
}

我们使用 EF Core 3.1 Code-First 进行迁移。

我正在寻找一种方法使 Message.Author 成为必需的属性,它应该指向表 中的一列创建为 AuthorId NOT NULL 的消息

我试过:

public static void Map(this EntityTypeBuilder<Message> builder)
{
builder.HasOne(m => m.Author);
}

由于这是使用 Add-Migration 和 Update-Database 应用的,因此创建了数据库列 AuthorId,但允许使用 NULL

似乎没有可以在 HasOne() 之后添加的方法 IsRequired()

我也试过:

public static void Map(this EntityTypeBuilder<Message> builder)
{
builder.Property(m => m.Author).IsRequired();
}

但是这并没有说明

The property 'Message.Author' is of type 'Role' which is not supported by current database provider. Either change the property CLR type or ignore the property using the '[NotMapped]' attribute or by using 'EntityTypeBuilder.Ignore' in 'OnModelCreating'.

执行 .HasOne(...) 后跟 .Property(...).IsRequired() 也不起作用:

'Author' cannot be used as a property on entity type 'Message' because it is configured as a navigation.

我设法使 Message.Conversation 成为必需的:

public static void Map(this EntityTypeBuilder<Conversation> builder)
{
builder.HasMany(c => c.Messages) // A conversation can have many messages
.WithOne(e => e.Conversation) // Each message belongs to at most 1 conversation
.IsRequired(); // A message always has a conversation
}

但是我不想让 Role 知道消息,因为我永远不想直接从 Role 检索消息(这将通过对话和参与者发生)。

我的最终问题是:有没有一种方法可以使 Message.Author 成为必需的(NOT NULL),而无需将 MessageRole 链接在一起与 Role 中的 Messages 属性存在完整的一对多关系?

最佳答案

如何将 Role 的外键添加到 Message 然后要求该属性不为 null?像这样的东西:

// MessageConfiguration.cs
builder.Property(b => b.RoleId).IsRequired()

关于c# - EF Core 中是否可能需要单向导航属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63396190/

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