Решил забацать я тут лисапед, а именно, ручками в конструкторе накидать класс Entity его поля(свойства) и пользовать его и в хвост и в гриву. Почему именно Entity, потому что захотелось подвязать обновление, добавление, удаление через маппинг на хранимки.
Также это чудо стал рисовать, чтобы сделать заполнение коллекции хранимкой замапленной конструктором(а зачем же его создали братья мелкие, именно для этого).
И тут понеслось. Стал пробовать, читал кто как делал, и выяснил, что не особо и популярно,
Пользуются этим функционалом по разному, кто комплексобжект юзает, кто функции в обратку запускает, но всё это не то, так сказать не достойно джедая.
ссылка1
ссылка2
ссылка3
Короче пришёл к выводу надо, лисапедить.
Причем нужно сделать так, чтобы при обновлении данные в CSDL,SSDL,MSL не затирались, о чем постоянно напоминает мелкософт
Вот что получилось.
Пример высосан из пальца, это простенький семпл. Кому надо подкрутит под себя.
Процедура заполнения
1.
2.
3.
4.
5.
6.
ALTER proc [dbo].[usp_get_Source_ByCfo] @Cfo uniqueidentifier
as
Set nocount on;
select ID,НазваниеИсточника,Код_подразделения,Порядок, 1 as qwe from Словарь_источников
where ((Код_подразделения=@cfo and @Cfo is not null) or (@Cfo is null))
and НазваниеИсточника is not null
order by НазваниеИсточника
Далее вставка, изменение, удаление.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
ALTER proc [dbo].[usp_add_sourceitem] @qwe int,@Код_подразделения uniqueidentifier,
@Порядок int,@НазваниеИсточника nvarchar( 255 )
as
declare @newid as uniqueidentifier =NEWID()
INSERT INTO dbo.Словарь_источников (ID, НазваниеИсточника,Порядок,Код_подразделения)
Values (@newid,@НазваниеИсточника,@Порядок,@Код_подразделения)
select @newid as ID
alter proc [dbo].[usp_edit_sourceitem] @ID uniqueidentifier, @qwe int,@Код_подразделения uniqueidentifier,
@Порядок int,@НазваниеИсточника nvarchar( 255 )
as
update dbo.Словарь_источников
set НазваниеИсточника=@НазваниеИсточника,Порядок=@Порядок,Код_подразделения=@Код_подразделения
where ID=@ID
create proc dbo.usp_delete_sourceitem @ID uniqueidentifier
as
delete from dbo.Словарь_источников
where ID=@ID
Сама табла
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE TABLE [dbo].[Словарь_источников](
[НазваниеИсточника] [nvarchar]( 50 ) NOT NULL,
[Порядок] [int] NULL,
[Изменено] [datetime] NULL,
[ID] [uniqueidentifier] ROWGUIDCOL NOT NULL,
[Код_подразделения] [uniqueidentifier] NULL,
PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Словарь_источников] ADD CONSTRAINT [DF_Словарь_источников_Порядок] DEFAULT (( 1 )) FOR [Порядок]
GO
ALTER TABLE [dbo].[Словарь_источников] ADD CONSTRAINT [DF_Словарь_источников_Изменено] DEFAULT (getutcdate()) FOR [Изменено]
GO
ALTER TABLE [dbo].[Словарь_источников] ADD DEFAULT (newsequentialid()) FOR [ID]
GO
ну и CSDL,SSDL,MSL
CSDL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<?xml version="1.0" encoding="utf-8"?>
<Schema Namespace="SourceModel" Alias="Self" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns="http://schemas.microsoft.com/ado/2008/09/edm">
<EntityContainer Name="SourceCon" annotation:LazyLoadingEnabled="false">
<EntitySet Name="v_Template_SourceItem" EntityType="SourceModel.v_Template_SourceItem" />
<FunctionImport Name="Get_Source_ByCfo" EntitySet="v_Template_SourceItem" ReturnType="Collection(SourceModel.v_Template_SourceItem)">
<Parameter Name="Cfo" Mode="In" Type="Guid" />
</FunctionImport>
</EntityContainer>
<EntityType Name="v_Template_SourceItem">
<Key>
<PropertyRef Name="ID" />
</Key>
<Property Type="Guid" Name="ID" Nullable="false" />
<Property Type="String" Name="НазваниеИсточника" MaxLength="255" FixedLength="false" Unicode="true" />
<Property Type="Int32" Name="Порядок" />
<Property Type="Guid" Name="Код_подразделения" />
<Property Type="Int32" Name="qwe" />
</EntityType>
</Schema>
SSDL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
<?xml version="1.0" encoding="utf-8"?>
<Schema Namespace="SourceModel.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2008" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2009/02/edm/ssdl">
<EntityContainer Name="SourceModelStoreContainer">
<EntitySet Name="v_Template_SourceItem" EntityType="SourceModel.Store.v_Template_SourceItem" store:Type="Views" store:Schema="dbo" store:Name="v_Template_SourceItem">
<DefiningQuery>SELECT
[v_Template_SourceItem].[ID] AS [ID],
[v_Template_SourceItem].[НазваниеИсточника] AS [НазваниеИсточника],
[v_Template_SourceItem].[Порядок] AS [Порядок],
[v_Template_SourceItem].[Код_подразделения] AS [Код_подразделения],
[v_Template_SourceItem].[qwe] AS [qwe]
FROM [dbo].[v_Template_SourceItem] AS [v_Template_SourceItem]</DefiningQuery>
</EntitySet>
</EntityContainer>
<!--Errors Found During Generation:
warning 6002 : The table/view 'DB_ELECTRO_GUID.dbo.v_Template_SourceItem' does not have a primary key defined. The key has been inferred and the definition was created as a read-only table/view.
-->
<EntityType Name="v_Template_SourceItem">
<Key>
<PropertyRef Name="ID" />
</Key>
<Property Name="ID" Type="uniqueidentifier" Nullable="false" />
<Property Name="НазваниеИсточника" Type="nvarchar" MaxLength="255" />
<Property Name="Порядок" Type="int" />
<Property Name="Код_подразделения" Type="uniqueidentifier" />
<Property Name="qwe" Type="int" />
</EntityType>
<Function Name="usp_add_sourceitem" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="false" ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo">
<Parameter Name="qwe" Type="int" Mode="In" />
<Parameter Name="Код_подразделения" Type="uniqueidentifier" Mode="In" />
<Parameter Name="Порядок" Type="int" Mode="In" />
<Parameter Name="НазваниеИсточника" Type="nvarchar" Mode="In" />
</Function>
<Function Name="usp_delete_sourceitem" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="false" ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo">
<Parameter Name="ID" Type="uniqueidentifier" Mode="In" />
</Function>
<Function Name="usp_edit_sourceitem" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="false" ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo">
<Parameter Name="ID" Type="uniqueidentifier" Mode="In" />
<Parameter Name="qwe" Type="int" Mode="In" />
<Parameter Name="Код_подразделения" Type="uniqueidentifier" Mode="In" />
<Parameter Name="Порядок" Type="int" Mode="In" />
<Parameter Name="НазваниеИсточника" Type="nvarchar" Mode="In" />
</Function>
<Function Name="usp_get_Source_ByCfo" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="false" ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo">
<Parameter Name="Cfo" Type="uniqueidentifier" Mode="In" />
</Function>
</Schema>
MSL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
<?xml version="1.0" encoding="utf-8"?>
<Mapping Space="C-S" xmlns="http://schemas.microsoft.com/ado/2008/09/mapping/cs">
<EntityContainerMapping StorageEntityContainer="SourceModelStoreContainer" CdmEntityContainer="SourceCon">
<EntitySetMapping Name="v_Template_SourceItem">
<EntityTypeMapping TypeName="SourceModel.v_Template_SourceItem">
<MappingFragment StoreEntitySet="v_Template_SourceItem">
<ScalarProperty Name="qwe" ColumnName="qwe" />
<ScalarProperty Name="Код_подразделения" ColumnName="Код_подразделения" />
<ScalarProperty Name="Порядок" ColumnName="Порядок" />
<ScalarProperty Name="НазваниеИсточника" ColumnName="НазваниеИсточника" />
<ScalarProperty Name="ID" ColumnName="ID" />
</MappingFragment>
</EntityTypeMapping>
<EntityTypeMapping TypeName="SourceModel.v_Template_SourceItem">
<ModificationFunctionMapping>
<InsertFunction FunctionName="SourceModel.Store.usp_add_sourceitem">
<ScalarProperty Name="НазваниеИсточника" ParameterName="НазваниеИсточника" />
<ScalarProperty Name="Порядок" ParameterName="Порядок" />
<ScalarProperty Name="Код_подразделения" ParameterName="Код_подразделения" />
<ScalarProperty Name="qwe" ParameterName="qwe" />
<ResultBinding Name="ID" ColumnName="ID" />
</InsertFunction>
<UpdateFunction FunctionName="SourceModel.Store.usp_edit_sourceitem">
<ScalarProperty Name="НазваниеИсточника" ParameterName="НазваниеИсточника" Version="Current" />
<ScalarProperty Name="Порядок" ParameterName="Порядок" Version="Current" />
<ScalarProperty Name="Код_подразделения" ParameterName="Код_подразделения" Version="Current" />
<ScalarProperty Name="qwe" ParameterName="qwe" Version="Current" />
<ScalarProperty Name="ID" ParameterName="ID" Version="Current" />
</UpdateFunction>
<DeleteFunction FunctionName="SourceModel.Store.usp_delete_sourceitem">
<ScalarProperty Name="ID" ParameterName="ID" />
</DeleteFunction>
</ModificationFunctionMapping>
</EntityTypeMapping>
</EntitySetMapping>
<FunctionImportMapping FunctionImportName="Get_Source_ByCfo" FunctionName="SourceModel.Store.usp_get_Source_ByCfo">
<ResultMapping>
<EntityTypeMapping TypeName="SourceModel.v_Template_SourceItem">
<ScalarProperty Name="ID" ColumnName="ID" />
<ScalarProperty Name="НазваниеИсточника" ColumnName="НазваниеИсточника" />
<ScalarProperty Name="Порядок" ColumnName="Порядок" />
<ScalarProperty Name="Код_подразделения" ColumnName="Код_Подразделения" />
<ScalarProperty Name="qwe" ColumnName="qwe" />
</EntityTypeMapping>
</ResultMapping>
</FunctionImportMapping>
</EntityContainerMapping>
</Mapping>
Ну и наконец костыль
1.
2.
3.
4.
5.
6.
alter view dbo.v_Template_SourceItem
as
SELECT ID, cast('' as nvarchar( 255 )) as НазваниеИсточника,cast( 0 as int) as Порядок,
cast(NULL as uniqueidentifier) as Код_подразделения,cast( 0 as int) as qwe
from dbo.Словарь_источников
where 1 = 2
ну а дальше как этим пользоваться надеюсь, все знают.
Жду критики господа и дамы.
Может кто предложит как избавиться от костыля.