gpt4 book ai didi

c# - 使用 Entity Framework ,我如何反射(reflect)多对多关系并将存在的实体添加到正在创建的新实体?

转载 作者:太空狗 更新时间:2023-10-29 21:42:17 24 4
gpt4 key购买 nike

我是 Entity Framework 的新手,正在尝试解决问题。我创建了一个不是很复杂的数据库。大约有 7 个表,其中 3 个是映射表,用于将一个表记录与另一个表记录相关联。我在这里使用的例子是这样的:

  • 表用户

    • 用户名
    • 用户名
  • 表格角色

    • 角色编号
    • 角色名
  • 表:用户角色

    • 用户名
    • 角色编号

外键映射到我的数据库中。当我在 VS 2008 中创建一个新的实体模型时,图表似乎具有正确的关系,但没有为 UserRole 表创建表。该关系映射为用户和角色之间的多对多关系。

我的问题是我可以创建新用户和新角色,但我不知道如何使用现有角色创建新用户。此外,开始时 UserRole 表可能未在模型中正确映射。到目前为止,这是我的代码:

ObjectQuery<Role> roles = context.Roles;
Role role = context.Roles.Where(c => c.RoleName == "Subscriber").First();

User user = new User
{
DisplayName = "TestCreate2",
Email = "test@test.com",
Password = "test"
};
context.AttachTo("Roles", role);
user.Roles.Add(role);
context.AddToUsers(user);
context.SaveChanges();

这是我遇到的错误:

Unable to update the EntitySet 'UserRoles' because it has a DefiningQuery and no element exists in the element to support the current operation.

这是属于 UserRole 表的 xml:

<EntitySet Name="UserRoles" EntityType="RememberTheJourneyModel.Store.UserRoles" store:Type="Tables" store:Schema="dbo" store:Name="UserRoles">
<DefiningQuery>SELECT
[UserRoles].[Role_id] AS [Role_id],
[UserRoles].[User_id] AS [User_id]
FROM [dbo].[UserRoles] AS [UserRoles]</DefiningQuery>
</EntitySet>

它只是想弄清楚如何查询上下文,以便它给了我一个实际的 Role 实体。我确定问题与 UserRole 的映射方式有关,但我才刚刚开始,不知道哪里出了问题。

我确实搜索过谷歌和这个网站,但我想我还没有想出正确的搜索参数来找到可以帮助我解决这个问题的问题。我发现一个问题说 EF 对此有问题,但如果你映射表使两列都成为主键,它就会自行解决。我不知道该怎么做。这是在数据库中(使用 SQL SERVER 2005 EXPRESS)还是在映射中完成的?这是一个个人项目,因此如果需要,我可以发布有关代码或 xml 的更多详细信息。我们将不胜感激。

最佳答案

我记得以前也遇到过这个问题......我相信我通过在我的关联表中制作两个列键来修复它。

您可以在 SQL Server Management Studio 表设计器中将这两个列都设为主键。只需同时突出显示 User_Id 和 Role_Id,右键单击左侧并选择主键...这将使任何记录都不能具有相同的 User_Id 和 Role_Id 组合..使每个条目都是唯一的。

然后您可以在 Entity Framework 设计器中更新您的数据模型。希望一切顺利。

我认为,如果表没有定义任何键来确保记录是唯一的,那么 EF 将无法正确更新记录,因此框架会防范这种情况。

关于c# - 使用 Entity Framework ,我如何反射(reflect)多对多关系并将存在的实体添加到正在创建的新实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2125901/

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