繁体   English   中英

实体框架(4)外键关系问题

[英]Entity Framework (4) Foreign key relationship question

让我们说:

用户名实体,Int64作为ID和其他一些字段。

具有Int64作为ID的消息实体和通过1用户名链接到用户名实体的一些其他字段可以具有0到多个消息关系。

我有两个用于用户名和消息实体的存储库(基本全部,添加,删除,保存方法)。

但是我想将我在代码中生成的消息实体(新的Message()等)与用户名相关联,我将如何使用存储库和两个不同的objectcontexts进行此操作?

我通过以下方式使用存储库来实现它:

usernameEntity.Messages.Add(msg);

任何人都有任何提示,相当困惑,好像我可以将这种类型的逻辑分成两个不同的存储库。

你只需致电:

var user = repository.GetUserById(id);
user.Messages.Add(new Message(...));
Save(); // I don't know how do you save changes.

您的存储库应该共享一个工作单元(业务事务)的单个上下文。 您应该有一些方法(保存,提交或其他任何方法),这些方法将保存对从所有存储库加载的实体所做的更改。 这通常由实现工作单元模式的单独类来处理,该工作模式包装上下文并在存储库之间共享。 保存更改将在工作单元而不是存储库上调用。 这个问题有很多相关的问题。

如果在EFv4中建模了真正的外键关系,您还可以使用:

var message = new Message(...);
message.UserId = id; // Foreign key property exposed on Message entity
repository.Insert(message);
Save();

您需要一个跨多个存储库的工作单元 - 并负责提交对数据库的更改。

我在同一个实体上下文之上使用存储库模式,因此您可以轻松地在存储库之间共享对象。

如果它是一对多关系,那么您的消息实体应该有一个用户名id。 您可以使用用户名id在消息实体存储库ObjectContext中查找用户对象,并将消息添加到用户,然后保存更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM