小编Are*_*rek的帖子

Getter和setter来自不同的界面

我真的需要这样的东西:

interface IReadableVar
{
    object Value { get; }
}

interface IWritableVar
{
    object Value { set; }
}

interface IReadableWritableVar : IReadableVar, IWritableVar
{
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用时,IReadableWritableVar.Value我得到编译错误,除非我明确地转换为基接口,如下所示:

static void Main()
{
    IReadableWritableVar var = null;
    var t = var.Value;  // <-- CS0229: Ambiguity between 'IReadableVar.Value' and 'IWritableVar.Value'
    var.Value = null;   // <-- CS0229: Ambiguity between 'IReadableVar.Value' and 'IWritableVar.Value'

    var v = ((IReadableVar)var).Value;  // compiles fine
    ((IWritableVar)var).Value = null;   // compiles fine
}
Run Code Online (Sandbox Code Playgroud)

为什么我会得到这些错误,尽管编译器应该清楚一切?除了强制转换(应用程序中有数百个位置)之外,有没有办法解决这个问题?

更新:有人建议这是实现2个具有"相同名称"属性的接口,但这有点不同,因为在其他情况下接口中没有继承.无论如何,问题现在解决了 - 看到接受的答案.

c# interface

21
推荐指数
2
解决办法
1936
查看次数

实体框架不会更新由触发器修改的值

我的表Sections(SQL Server)具有ID主键(int, identity)SortIndex列(int)用于排序目的.

数据库有一个触发器,可以设置SortIndex := ID每个触发器INSERT.显然,我想稍后通过交换两行的值来更改排序索引.

我使用Entity Framework访问数据,所有这些都使用MVC3 Web应用程序.

问题是,SortIndex在我将新对象插入表中后,Entity Framework不会更新值.它还会缓存所有数据,因此以下调用从此表中获取所有对象也会SortIndex为此对象提供错误的值.

我尝试改变StoreGeneratedPattern这个专栏EDMX.这似乎是伟大而优雅的,但并没有解决问题.

如果我设置为Identity,它会导致EF正确更新该值,但它变为只读(尝试更改时抛出异常).将其设置Computed为类似,但不是抛出异常,而是不将值写入DB.

如果我需要在插入对象后使用它,我可以每次重新创建EF对象,只需执行以下操作:

DatabaseEntities db = new DatabaseEntities()
Run Code Online (Sandbox Code Playgroud)

但对我来说这似乎是一种丑陋的解决方法.

这个问题的解决方案是什么?

显然是一些东西,不需要我在每次之后做一些动作insert(并且冒着被遗忘和不被注意的风险)是首选.

c# sql-server asp.net-mvc entity-framework

11
推荐指数
1
解决办法
1万
查看次数

为什么VS 2015菜单正确对齐?

有一天,我的菜单开始右对齐。有什么可以打破的?

在此处输入图片说明

visual-studio visual-studio-2015

1
推荐指数
1
解决办法
299
查看次数