0

资源:

DictionaryTable:

DictID     int
RUWordID   int   -> FK to RUWordsTable.RUWordID
ENWordID   int   -> FK to ENWordsTable.ENWordID

RUWordTable:

RUWordID   int
Word       string

ENWordTable:

ENWordID   int
Word       string

我希望能够将数据读/写到使用以下结构的表中:

RUWord   ENWord
Привет   Hello
...

在速度和从 MVC 视图轻松访问数据方面做我想做的事情的最佳选择是什么。据我了解,可以选择创建 SQL 视图并使用它(但不确定可能的数据插入)。或者只是在 Visual Studio 设计器中创建相同但使用实体框架。基本上一个词可以被不同地翻译(在另一个表中有几个条目)。我的目标是找到一种方法如何通过自动插入将单词添加到字典中(当找不到源或翻译时,将其添加到参考表中,如果找到 - 只需使用现有条目)

4

1 回答 1

1

这在很大程度上取决于您需要一口气读取的数据量。如果您想查找一个或几个单词的翻译,实体框架模型将做得很好。如果您需要获取大量数据,则视图或存储过程会更好。但我不希望后者发生。在 MVC 视图中,您可能会使用分页。

至于插入数据 EF 将是一个可行的选择。您已经定义了一个联结表 ( DictionaryTable)。您可以以连接表透明的方式设置 EF:

class RuWord
{
    public int Id { get; set; }
    public string Word { get; set; }
    public ICollection<EnWord> EnWords { get; set; }
}

class EnWord
{
    public int Id { get; set; }
    public string Word { get; set; }
    public ICollection<RuWord> RuWords { get; set; }
}

(假设您首先使用代码)

在数据输入中,您可以将新的俄语单词添加到RussianWords上下文的 DbSet 中,并将新的或现有的英语单词添加到单词的EnWords集合中并调用SaveChanges(). EF 将在联结表中插入单词和适当的记录(将两个外键作为其复合主键)。

但是......在现实生活中,我几乎从未见过纯接线表。我将其引入是因为在您的情况下,我几乎无法想象仅注册俄语和英语单词之间的关联就足够了。您是否(至少)不需要某种程度的偏好?就像“日期”这个词有更多的翻译一样,但首选的是日历(除非你正在为约会网站工作,但即便如此......)。无论如何,如果您想记录有关关联的某些内容,则需要显式映射联结表并创建关联记录,并将其所有详细信息写入代码。

我希望这能给一些方向。


编辑(在您发表评论后)

如果您使用显式联结实体(即与联结表对应的类)。该实体可以具有两个属性EnWordRuWord作为对上述两个表的引用。数据输入意味着创建一个新DictionaryTable实例并设置其属性(可以是新词或现有词)。

于 2012-07-25T21:44:25.083 回答