- Extension ID
- What's new?
- Description
- In what situation should you install this extension?
- Technology support
- Function Point, Quality and Sizing support
- CAST AIP compatibility
- Supported DBMS servers
- Prerequisites
- Download and installation instructions
- What results can you expect?
- Evolution
- Assumptions
- Limitations
Summary: This document provides basic information about the extension providing Entity Framework support for C#.
Extension ID
com.castsoftware.entity
What's new?
See Entity Framework 2.0 - Release Notes for more information.
Description
This extension provides support for Entity Framework. The calculation of Automated Function Points for your .NET analyses will be supplemented through the links between objects produced by the base .NET Analyzer and database tables, using Entity Framework CRUD operations.
In what situation should you install this extension?
If your .NET application contains Entity Framework source code and you want to view these object types and their links, then you should install this extension. More specifically the extension will identify:
- "use" links from C# methods using Entity Framework operations to participating Database tables
Technology support
Entity Framework
Entity Framework is delivered with the .NET Framework. Therefore the following .NET frameworks are supported by this extension:
Version | Supported |
---|---|
3.0 and above |
Version | Supported |
---|---|
3.x |
|
2.x | |
1.x |
Function Point, Quality and Sizing support
- Function Points (transactions): a green tick indicates that OMG Function Point counting and Transaction Risk Index are supported
- Quality and Sizing: a green tick indicates that CAST can measure size and that a minimum set of Quality Rules exist
Function Points (transactions) | |
---|---|
Quality and Sizing |
CAST AIP compatibility
CAST AIP release | Supported | Supported Technology |
---|---|---|
8.3.x | C# |
Supported DBMS servers
This extension is compatible with the following DBMS servers:
DBMS | Supported |
---|---|
CSS/PostgreSQL | |
Oracle | |
Microsoft SQL Server |
Prerequisites
An installation of any compatible release of CAST AIP (see table above) |
Download and installation instructions
Include the extension using the interface in AIP Console:
There is nothing further to do. Follow the instructions below to run a new analysis/snapshot to generate new results:
- Modern application onboarding - run the initial deep analysis
- Legacy application onboarding - Step-by-step onboarding - Run the analysis
What results can you expect?
Once the analysis/snapshot generation has completed, you can view the results in the normal manner. The following links will be displayed in CAST Enlighten:
Links
Link type | Source and destination of link | Methods supported |
---|---|---|
useInsertLink | Between the caller .NET Class / Method objects and Database Table object |
|
useDeleteLink | Between the caller .NET Class / Method objects and Database Table object |
|
useUpdateLink | Between the caller .NET Class / Method objects and Database Table object |
|
useSelectLink | Between the caller .NET Class / Method objects and Database Table object |
|
Code examples
Insert operation
public void AddNewContractor() { var contractor = ModelFakes.ContractorFake.Generate(); var vendor = dbContext.Vendor.FirstOrDefault(); contractor.VendorId = vendor.Id; dbContext.Contractor.Add(contractor); dbContext.SaveChanges(); Assert.AreNotEqual(0, contractor.Id); }
protected override void Seed(Hth.Aepollon.Data.BackendDataAccess.AepollonContext context) { var listRefdefaut = context.RefDefauts.ToList(); foreach (var refDef in listRefdefaut) { context.MatriceDemerits.AddOrUpdate( new MatriceDemerit { idModeOperatoire = 1, idRefDefaut = refDef.idRefDefaut, idTailleDefaut = 1, PointsDemerit = 1, PointsDemeritLineaire = 1, Tare = (decimal)0.05 }, new MatriceDemerit { idModeOperatoire = 1, idRefDefaut = refDef.idRefDefaut, idTailleDefaut = 2, PointsDemerit = 3, PointsDemeritLineaire = 3, Tare = (decimal)0.20 }, new MatriceDemerit { idModeOperatoire = 1, idRefDefaut = refDef.idRefDefaut, idTailleDefaut = 3, PointsDemerit = 5, PointsDemeritLineaire = 5, Tare = (decimal)0.50 }); } context.SaveChanges(); }
Delete operation
public void RemoveEntry() { var rec = dbContext.Contractor.FirstOrDefault(); dbContext.Contractor.Remove(rec); dbContext.SaveChanges(); }
Update operation
public void UpdateContractorAddress() { var contractor = dbContext.Contractor.FirstOrDefault(); contractor.Address = ModelFakes.ContractorFake.Generate().Address; dbContext.Contractor.Update(contractor); dbContext.SaveChanges(); }
Select operation
public void FindEntry(int id) { var rec = dbContext.Vendor.Find(id); dbContext.SaveChanges(); }
LINQ-To-Entities
public static void LinqToEntitiesQueries() { using (var context = new SchoolDBEntities()) { //Retrieve students whose name is Bill - Linq-to-Entities Query Syntax var students = (from s in context.Students where s.StudentName == "Bill" select s).ToList(); //Retrieve students with the same name - Linq-to-Entities Method Syntax var studentsWithSameName = context.Students .GroupBy(s => s.StudentName) .Where(g => g.Count() > 1) .Select(g => g.Key); } }
Support for EntityModelConfiguration
EntityModelConfiguration allows configuration to be performed for any entity type in a model. Support has be been provided to create links between method and table, when table name is overridden through EntityModelConfiguration.
Evolution
- Support has been provided for EntityFramework Core
- Multiple links between caller method and database table based on CRUD operations
- Support for Asynschronous API and batch operations
- Positioning of bookmarks
- Support for LINQ-to-Entities
Assumptions
- SaveChanges() method of DbContext class commits the operation in the database table. Hence no useLink is created between caller method and table.
- When the class is referenced in other code as a property, parent and child relation is created. Any CRUD operation performed on parent class is also reflected in the child class. e.g. In the below case, data is inserted in Contractor, but useInsertLink is created for both Contractor and Vendor tables, as Vendor is referenced in Contractor (foreign key).
Limitations
- Analyzing the participating database tables is mandatory for the extension to work correctly