У меня есть следующий (упрощенный) дизайн БД:
- Object
- UserRight
- GroupRight
В основном я хочу установить UserRights
и / или GroupRights
на Objects
. UserRights
должен быть сильнее, чем GroupRights
. Другими словами: если установлен UserRight
, то GroupRights
игнорируются.
Я решил эту проблему с помощью представлений SQL и одной хранимой процедуры, но я не могу использовать результат в C #.
Хранимая процедура выглядит следующим образом и добавляется в файл EDMX Visual Studio 2010.
<Function Name="UDF_GetAuthorizedObjects" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="false" ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo">
<CommandText>
select * from Objects
where exists (select * from V_GetEffectiveObjectRights where
UserId = @userId and RightValue = @neededRightId and Objects.Id = ObjectId)
</CommandText>
<Parameter Name="userId" Type="int"></Parameter>
<Parameter Name="neededRightId" Type="int"></Parameter>
</Function>
FunctionImport:
<FunctionImport Name="GetAuthorizedObjects" EntitySet="Objects" ReturnType="Collection(DAL.Object)">
<Parameter Name="userId" Type="Int32" Mode="In" />
<Parameter Name="neededRightId" Type="Int32" Mode="In" />
</FunctionImport>
FunctionImportMapping:
<FunctionImportMapping FunctionImportName="GetAuthorizedObjects" FunctionName="VSD.Core.DAL.Store.UDF_GetAuthorizedObjects" />
Я получаю следующее сообщение об ошибке:
Тип возврата 'DAL.Object' для функции 'GetAuthorizedObjects'
Абстрактно и не может быть отображено неявно.
У кого-нибудь есть предложение, как решить проблему по-другому, если подход с хранимой процедурой невозможен?