【问题标题】:How do I update a table that only has foreign keys如何更新只有外键的表
【发布时间】:2020-07-20 02:54:40
【问题描述】:

我有一个只有外键的表的数据库。我可以手动将数据添加到此表中,然后使用代码将其删除。但是,我无法向其中添加数据。这可能是因为我实际上不知道如何访问我的表,或者我做错了。感谢您的帮助。

我的外键唯一表:

CREATE TABLE UserCategory 
(
    CatID INT FOREIGN KEY REFERENCES Category(ID),
    UserID NVARCHAR(128) FOREIGN KEY REFERENCES [User](ID),
    CONSTRAINT PK_UserCategory PRIMARY KEY (CatID, UserID)
);

在模型中链接它的代码:

modelBuilder.Entity<Category>()
                .HasMany(e => e.Users)
                .WithMany(e => e.Categories)
                .Map(m => m.ToTable("UserCategory").MapLeftKey("CatID").MapRightKey("UserID"));

如您所见,我有一个名为我创建的表,其中包含预期的值。

但是,当我尝试通过代码访问此表时,我无法直接访问这些值。我可以像这样删除值:

var userCats = thisUser.Categories.ToList();

foreach (var cat in userCats)
{
    thisUser.Categories.Remove(cat);
}

但是当我尝试访问 UserCategories 属性时,我得到了这个:

如何将新的UserCategories 添加到我的数据库中?如果我只是创建一个新的Category,并以与删除一个相同的方式添加它(但显然是Add),我需要填写Name。然后当我填写Name 时,它告诉我存在密钥冲突,因为它似乎将其添加到Category 表中,而不是UserCategory

这里是另外两个有问题的表:

CREATE TABLE [User] 
(
    ID NVARCHAR(128) PRIMARY KEY,
    FirstName VARCHAR(255) NOT NULL,
    LastName VARCHAR(255),
    JoinDate DATETIME,
    ZipCode VARCHAR(25),
    SearchRadius INT,
    LoginToBusinessSide BIT
);

/*The categories businesses can fall under. */
CREATE TABLE Category 
(
    ID INT IDENTITY(1,1) PRIMARY KEY,
    [Name] VARCHAR(255) UNIQUE NOT NULL,
);

我是否尝试访问错误?我怎样才能正确访问它?谢谢。

【问题讨论】:

  • 为了添加到UserCategory,您需要添加一条记录到User,获取它的ID,然后添加一条记录到Category,获取它的ID。拥有这两个 ID 后,您可以将这些 ID 插入到 UserCategory
  • @user212514 你能用代码告诉我怎么做吗?我已经为这个问题苦苦挣扎了很长时间,非常感谢您的帮助。
  • 我建议您在学习概念时只关注 SQL。在您感觉自己掌握得很好之后,再对 C# 代码进行分层。这是一个 SQL 示例:stackoverflow.com/questions/38580619/…

标签: c# asp.net sql-server


【解决方案1】:

我不完全确定为什么会这样,但我终于能够将条目保存到我的 UserCategory 表中。这是我的代码:

for(var i = 0; i < categories.Length; ++i)
{
   var user = db.Users.Find(thisUser.ID);
   var cat = db.Categories.Find(categories[i]);
   user.Categories.Add(cat);
}

我必须主动连接到外键链接到的两个表,然后当我将一个添加到类别表时,它会转到正确的位置。

如果您确切了解为什么会这样,或者有更好的方法,请发表评论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多