MVC EF数据库首先和SQL有很多很多关系

时间:2012-07-24 12:52:40

标签: sql asp.net-mvc entity-framework database-design

来源:

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设计器中创建相同但使用Entity Framework。 基本上一个词可以被不同地转换(在其他表中有几个条目)。我的目标是找到一种方法,如何使用自动插入向字典添加单词(当找不到源或翻译时,将其添加到引用表中,如果找到 - 只使用现有条目)

1 个答案:

答案 0 :(得分: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将在联结表中插入单词相应的记录(将两个外键作为其复合主键)。

但是......在现实生活中,我几乎没有看到过纯粹的连接表。我把它带进来因为在你的情况下我很难想象只需注册俄语和英语单词之间的关联就足够了。你(至少)不需要某种程度的偏好吗?就像有更多的单词“date”的翻译,但首选的是日历的东西(除非你在约会网站工作,但即便如此......)。无论如何,如果你想要记录关于的关联,你需要明确地映射联结表,并在代码中创建关联记录及其所有细节。

我希望这能给出一些指示。


修改(在您发表评论后)

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