gpt4 book ai didi

c# - Entity Framework 7 无法创建迁移,因为存在同名的导航属性

转载 作者:行者123 更新时间:2023-11-30 21:52:15 25 4
gpt4 key购买 nike

我正在尝试使用 Entity Framework 7 和代码优先开发创建我的第一个迁移,但出现以下错误:

The property 'Email' cannot be added to the entity type 'UserDTO' because a navigation property with the same name already exists on entity type 'UserDTO'.

我的环境是:1) Visual Studio 20152) Entity Framework v7.0.0-rc1-final3)代码优先开发4)使用fluent API,不使用数据注解

我无法弄清楚问题的根本原因是什么,但我有一些想法。我的 RoleDTO 类应该使用其电子邮件地址属性作为其 PK,并且它还有一个 RoleDTO 对象集合作为属性。

下面是我现在从 DbContext 继承的唯一类。我已经注释掉了我必须尝试减少问题的另一个实体。

class StorageContext : DbContext
{
public DbSet<UserDTO> Users { get; set; }

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("MySQLServerConnectionString")
}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<UserDTO>().HasKey(entity => entity.Email);
//modelBuilder.Entity<UserDTO>().HasMany(entity => entity.Roles);
}
}

这是 UserDTO 类。当我尝试进行迁移时,任何人都可以看到导致错误的原因吗?

internal class UserDTO
{
public EmailAddress Email { get; private set; }

public string FullName { get; private set; }

public string UserName { get; private set; }

public virtual ICollection<string> Roles { get; private set; }

// more below here like a constructor and some basic methods

如果我将 UserDTO 的 key 切换为纯字符串而不是复杂的对象 EmailAddress,它看起来会越过该错误,我会得到一个不同的、同样有趣的错误:

The property 'Roles' on entity type 'Microsoft.SRE.NavisionOnline.ConfigurationAutomation.DAL.SQLEntities.UserDTO' has not been added to the model or ignored.

最佳答案

据我所知,您不能使用复杂类型作为 PK。

对于第二条错误信息:你不能使用 ICollection<string> Roles {..} , EF 不会将此属性映射到表,因为您使用“字符串”作为类型。

您需要定义角色类并为其分配一个PK

public class Role
{
public int Id {get; set;}
public string RoleName {get; set;}
}

然后在您的 UserDTO 中:

public ICollection<Role> Roles {...}

关于c# - Entity Framework 7 无法创建迁移,因为存在同名的导航属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34935623/

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