![]() |
1
8
明白了-不容易,所以我会尽力解释清楚。(对于那些关心的人) 控制器相关代码:
所以,我的控制器调用一个名为
用户内容服务相关代码
所以,我的服务调用一个名为
现在,这里是棘手的部分。
我真的有
没有特定的存储库
. 我有一个
通用存储库
打电话
所以当有东西要求
但是现在,我给它一个
因为这个班 派生 从 总报告 ,它继承所有核心存储库逻辑(查找、添加等)。
一开始,我试着把它
更新模型
中的代码
总报告
类本身(然后我就不需要这个特定的存储库),但问题是检索现有实体的逻辑是基于特定的实体密钥,其中
但最终的结果是 缝合 是隐藏在数据层深处的,我最终得到了一个非常干净的控制器。 编辑 这种“存根技术”也适用于:
但问题是因为 岗位 是抽象的,我不能实例化,因此必须检查Post的类型并为 每一个 派生类型。不是一个真正的选择。 编辑2(上次) 好吧,使用“存根技术”处理抽象类,现在并发问题解决了。 我向 更新模型 方法和特殊 new() constraint . 实施:
接口:
这就避免了我必须手动计算T的类型,防止并发问题,也防止了对DB的额外访问。 非常棒。 编辑3(我以为最后一次是最后一次) 上面的“存根技术”起作用,但是如果我事先检索对象,它会抛出一个异常,说明在OSM中已经存在一个具有该关键字的实体。 有人能建议如何处理这个问题吗? 编辑4(好-就这样!) 我找到了解决办法,多亏了这个答案: Is is possible to check if an object is already attached to a data context in Entity Framework? 我试图使用以下代码“检查实体是否已附加”:
但它总是回来 无效的 ,即使在探索OSM时,我也可以看到我的实体在那里使用相同的键。 但这条规则有效:
也许因为我使用的是纯POCO,OSM很难找出实体密钥,谁知道呢。 哦,还有一件事我添加了-为了不必为每个实体添加特定的存储库,我创建了一个名为“ [实体键] “(公共财产属性)。 所有POCO都必须有一个用该属性修饰的公共属性,否则我会在存储库模块中抛出异常。 因此,我的通用存储库将查找此属性,以便创建/设置存根。 是的-它使用反射,但它是聪明的反射(基于属性),我已经在使用反射对T中的实体集名称进行多极化。 不管怎样,问题解决了-现在一切正常! |
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |