Is it possible to have different properties for the same model in multi-tenant applications scenario?How to create a multi-tenant database with shared table structures?When creating a Heroku Add-On for a multi-tenant service, how do you provision multiple Heroku applications to a single tenant?Migrating Single-Tenant to Multi-Tenant applicationDatabase Schema for Multi tenant SaaS ApplicationDynamically changing schema for different tenants in multi-tenant asp.net mvc applicationbest approach for multi tenant SaaS applicationMulti-tenant application with Propel ORMLoading the tenant specific variables in a multi tenant applicationHow to design a multi-tenant node.js application?Outsystems:Is it possible to have same user in different tenants in a Multi-tenant application
I think I may have violated academic integrity last year - what should I do?
What does "Marchentalender" on the front of a postcard mean?
Is it ok to put a subplot to a story that is never meant to contribute to the development of the main plot?
Apparent Ring of Craters on the Moon
Future enhancements for the finite element method
In what episode of TOS did a character on the bridge make a comment about raising one to some power?
How can I find where certain bash function is defined?
What problems does SciDraw still solve?
Compact Mechanical Energy Source
A Mathematical Discussion: Fill in the Blank
Yandex Programming Contest: Alarms
Is CD audio quality good enough for the final delivery of music?
Can't use numexpr in horizontal mode
How to prevent bad sectors?
How could Catholicism have incorporated witchcraft into its dogma?
What are the benefits of cryosleep?
Is there any use case for the bottom type as a function parameter type?
Mother abusing my finances
Could I be denied entry into Ireland due to medical and police situations during a previous UK visit?
What does the term “mohel” mean in Hilchot Melicha (salting)?
Could IPv6 make NAT / port numbers redundant?
How to capture more stars?
How can I prevent interns from being expendable?
Grammar of "Nec huic publico, ut opinantur, malo turba tantum et imprudens uulgus ingemuit"
Is it possible to have different properties for the same model in multi-tenant applications scenario?
How to create a multi-tenant database with shared table structures?When creating a Heroku Add-On for a multi-tenant service, how do you provision multiple Heroku applications to a single tenant?Migrating Single-Tenant to Multi-Tenant applicationDatabase Schema for Multi tenant SaaS ApplicationDynamically changing schema for different tenants in multi-tenant asp.net mvc applicationbest approach for multi tenant SaaS applicationMulti-tenant application with Propel ORMLoading the tenant specific variables in a multi tenant applicationHow to design a multi-tenant node.js application?Outsystems:Is it possible to have same user in different tenants in a Multi-tenant application
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;
I have to design a multi-tenant application, I need to have custom fields for each tenant in the same model.
Customer 1 need to use some custom field, Customer 2 need to manage other fields in the same table and so on..
This is an example:
the same table (ticket) has a common (base) field list, then each tenant should be have his additional columns in the model:
I would like to implement a EF Code first .Net Core web application.
namespace Models.Base
public class TicketBase
public int Id get; set;
public string Description get; set;
public Datetime CreationDate get; set;
Tenant 1
namespace Models.Tenant1
public class Ticket : TicketBase
public string CustomerName get; set;
public Datetime DateCustomerCall get; set;
Tenant 2
namespace Models.Tenant2
public class Ticket : TicketBase
public string AnotherDescription get; set;
public Datetime AnotherDate get; set;
Is it correct to design the model this way or there are different approaches to this very common problem?
c# entity-framework multi-tenant core
add a comment |
I have to design a multi-tenant application, I need to have custom fields for each tenant in the same model.
Customer 1 need to use some custom field, Customer 2 need to manage other fields in the same table and so on..
This is an example:
the same table (ticket) has a common (base) field list, then each tenant should be have his additional columns in the model:
I would like to implement a EF Code first .Net Core web application.
namespace Models.Base
public class TicketBase
public int Id get; set;
public string Description get; set;
public Datetime CreationDate get; set;
Tenant 1
namespace Models.Tenant1
public class Ticket : TicketBase
public string CustomerName get; set;
public Datetime DateCustomerCall get; set;
Tenant 2
namespace Models.Tenant2
public class Ticket : TicketBase
public string AnotherDescription get; set;
public Datetime AnotherDate get; set;
Is it correct to design the model this way or there are different approaches to this very common problem?
c# entity-framework multi-tenant core
There is not one-size-fits-all solution for that. It depends very much on how your models differ, how often the requirements change etc.
– Sefe
Mar 24 at 9:00
Hi, I would like to use this approach stackify.com/writing-multitenant-asp-net-core-applications or benfoster.io/blog/… but it seems they share the same models
– erre
Mar 24 at 9:01
If TicketBase class represents bare bone ticket properties and you are not going to ever instantiate Ticketbase class as an object, then instead of TicketBase class you can consider having those properties as a part of ITicket interface. And let multiple tenant implement ITicket + their additional properties. This will also help you leverage multi tenancy DI injection where you can register tenant specific ticket objects and resolve them in your code, based on tenants through ITicket interface...Just another food for thought for your design.
– Asif
Mar 24 at 9:28
Thank you Asif, and How do you would implement it in .net core EF?
– erre
Mar 24 at 16:27
add a comment |
I have to design a multi-tenant application, I need to have custom fields for each tenant in the same model.
Customer 1 need to use some custom field, Customer 2 need to manage other fields in the same table and so on..
This is an example:
the same table (ticket) has a common (base) field list, then each tenant should be have his additional columns in the model:
I would like to implement a EF Code first .Net Core web application.
namespace Models.Base
public class TicketBase
public int Id get; set;
public string Description get; set;
public Datetime CreationDate get; set;
Tenant 1
namespace Models.Tenant1
public class Ticket : TicketBase
public string CustomerName get; set;
public Datetime DateCustomerCall get; set;
Tenant 2
namespace Models.Tenant2
public class Ticket : TicketBase
public string AnotherDescription get; set;
public Datetime AnotherDate get; set;
Is it correct to design the model this way or there are different approaches to this very common problem?
c# entity-framework multi-tenant core
I have to design a multi-tenant application, I need to have custom fields for each tenant in the same model.
Customer 1 need to use some custom field, Customer 2 need to manage other fields in the same table and so on..
This is an example:
the same table (ticket) has a common (base) field list, then each tenant should be have his additional columns in the model:
I would like to implement a EF Code first .Net Core web application.
namespace Models.Base
public class TicketBase
public int Id get; set;
public string Description get; set;
public Datetime CreationDate get; set;
Tenant 1
namespace Models.Tenant1
public class Ticket : TicketBase
public string CustomerName get; set;
public Datetime DateCustomerCall get; set;
Tenant 2
namespace Models.Tenant2
public class Ticket : TicketBase
public string AnotherDescription get; set;
public Datetime AnotherDate get; set;
Is it correct to design the model this way or there are different approaches to this very common problem?
c# entity-framework multi-tenant core
c# entity-framework multi-tenant core
asked Mar 24 at 8:57
erreerre
11
11
There is not one-size-fits-all solution for that. It depends very much on how your models differ, how often the requirements change etc.
– Sefe
Mar 24 at 9:00
Hi, I would like to use this approach stackify.com/writing-multitenant-asp-net-core-applications or benfoster.io/blog/… but it seems they share the same models
– erre
Mar 24 at 9:01
If TicketBase class represents bare bone ticket properties and you are not going to ever instantiate Ticketbase class as an object, then instead of TicketBase class you can consider having those properties as a part of ITicket interface. And let multiple tenant implement ITicket + their additional properties. This will also help you leverage multi tenancy DI injection where you can register tenant specific ticket objects and resolve them in your code, based on tenants through ITicket interface...Just another food for thought for your design.
– Asif
Mar 24 at 9:28
Thank you Asif, and How do you would implement it in .net core EF?
– erre
Mar 24 at 16:27
add a comment |
There is not one-size-fits-all solution for that. It depends very much on how your models differ, how often the requirements change etc.
– Sefe
Mar 24 at 9:00
Hi, I would like to use this approach stackify.com/writing-multitenant-asp-net-core-applications or benfoster.io/blog/… but it seems they share the same models
– erre
Mar 24 at 9:01
If TicketBase class represents bare bone ticket properties and you are not going to ever instantiate Ticketbase class as an object, then instead of TicketBase class you can consider having those properties as a part of ITicket interface. And let multiple tenant implement ITicket + their additional properties. This will also help you leverage multi tenancy DI injection where you can register tenant specific ticket objects and resolve them in your code, based on tenants through ITicket interface...Just another food for thought for your design.
– Asif
Mar 24 at 9:28
Thank you Asif, and How do you would implement it in .net core EF?
– erre
Mar 24 at 16:27
There is not one-size-fits-all solution for that. It depends very much on how your models differ, how often the requirements change etc.
– Sefe
Mar 24 at 9:00
There is not one-size-fits-all solution for that. It depends very much on how your models differ, how often the requirements change etc.
– Sefe
Mar 24 at 9:00
Hi, I would like to use this approach stackify.com/writing-multitenant-asp-net-core-applications or benfoster.io/blog/… but it seems they share the same models
– erre
Mar 24 at 9:01
Hi, I would like to use this approach stackify.com/writing-multitenant-asp-net-core-applications or benfoster.io/blog/… but it seems they share the same models
– erre
Mar 24 at 9:01
If TicketBase class represents bare bone ticket properties and you are not going to ever instantiate Ticketbase class as an object, then instead of TicketBase class you can consider having those properties as a part of ITicket interface. And let multiple tenant implement ITicket + their additional properties. This will also help you leverage multi tenancy DI injection where you can register tenant specific ticket objects and resolve them in your code, based on tenants through ITicket interface...Just another food for thought for your design.
– Asif
Mar 24 at 9:28
If TicketBase class represents bare bone ticket properties and you are not going to ever instantiate Ticketbase class as an object, then instead of TicketBase class you can consider having those properties as a part of ITicket interface. And let multiple tenant implement ITicket + their additional properties. This will also help you leverage multi tenancy DI injection where you can register tenant specific ticket objects and resolve them in your code, based on tenants through ITicket interface...Just another food for thought for your design.
– Asif
Mar 24 at 9:28
Thank you Asif, and How do you would implement it in .net core EF?
– erre
Mar 24 at 16:27
Thank you Asif, and How do you would implement it in .net core EF?
– erre
Mar 24 at 16:27
add a comment |
1 Answer
1
active
oldest
votes
IMHO, In SaaS, having a single code base and flexible configuration / extension for mutli-tenancy is the key to success.
To enable custom fields per tenant, the business model will have to have a fixed set base fields. The custom fields will have to be stored by entityid and tenantid in a separate table.
Your tables could look like the ones given below. This model is preferred so that having a generic extension table will result in less scalability and could soon be filled with the data volume as usage goes up.
Ticket
TicketExtn (extension table containing custom fields by tenant and entity)
The TicketExtn
table will contain fields like
TicketId
TenantId
FieldId
FieldValue
FieldDataType
etc
When we try to get the data for the Ticket
entity, we will also be getting the data from the TicketExtn
table and be setting the fields in the model.
The BaseModel will look like the one given below
public class ExtendedField
public Guid Id get; set;
public string FieldName get; set;
public Guid DataTypeId get; set;
/// <summary>
/// Can also be a typed class, this is just for reference
/// </summary>
/// <value>The field value.</value>
public string FieldValue get; set;
/// <summary>
/// Incase of using string for fieldvalue, the string to format the value as per the required datatype
/// will be provided here.
/// </summary>
/// <value>The field value format string.</value>
public string FieldValueFormatString get; set;
public class BaseModel
Dictionary<string, ExtendedField> ExtendedRows get; set;
public class Ticket : BaseModel
public int Id get; set;
public string Description get; set;
public DateTime CreationDate get; set;
In your services layer, there will be logic to fill these extended rows. Its better to have the logic for the filling up of the extended rows generic so that for any number of entities, this logic can be re-used.
HTH
Thank you Saravanan, this is the actual implementation the application has. (somet hink like github.com/dubeaud/bugnet), I would like to know if there is a way to have a simplest way to deal with entities, viewmodels and views in a mvc scenario. I'd like to have something like Ticket.MyPropertyTenant1 = "value" without handle with disctionaries, data types etc.
– erre
Mar 24 at 16:21
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55322140%2fis-it-possible-to-have-different-properties-for-the-same-model-in-multi-tenant-a%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
IMHO, In SaaS, having a single code base and flexible configuration / extension for mutli-tenancy is the key to success.
To enable custom fields per tenant, the business model will have to have a fixed set base fields. The custom fields will have to be stored by entityid and tenantid in a separate table.
Your tables could look like the ones given below. This model is preferred so that having a generic extension table will result in less scalability and could soon be filled with the data volume as usage goes up.
Ticket
TicketExtn (extension table containing custom fields by tenant and entity)
The TicketExtn
table will contain fields like
TicketId
TenantId
FieldId
FieldValue
FieldDataType
etc
When we try to get the data for the Ticket
entity, we will also be getting the data from the TicketExtn
table and be setting the fields in the model.
The BaseModel will look like the one given below
public class ExtendedField
public Guid Id get; set;
public string FieldName get; set;
public Guid DataTypeId get; set;
/// <summary>
/// Can also be a typed class, this is just for reference
/// </summary>
/// <value>The field value.</value>
public string FieldValue get; set;
/// <summary>
/// Incase of using string for fieldvalue, the string to format the value as per the required datatype
/// will be provided here.
/// </summary>
/// <value>The field value format string.</value>
public string FieldValueFormatString get; set;
public class BaseModel
Dictionary<string, ExtendedField> ExtendedRows get; set;
public class Ticket : BaseModel
public int Id get; set;
public string Description get; set;
public DateTime CreationDate get; set;
In your services layer, there will be logic to fill these extended rows. Its better to have the logic for the filling up of the extended rows generic so that for any number of entities, this logic can be re-used.
HTH
Thank you Saravanan, this is the actual implementation the application has. (somet hink like github.com/dubeaud/bugnet), I would like to know if there is a way to have a simplest way to deal with entities, viewmodels and views in a mvc scenario. I'd like to have something like Ticket.MyPropertyTenant1 = "value" without handle with disctionaries, data types etc.
– erre
Mar 24 at 16:21
add a comment |
IMHO, In SaaS, having a single code base and flexible configuration / extension for mutli-tenancy is the key to success.
To enable custom fields per tenant, the business model will have to have a fixed set base fields. The custom fields will have to be stored by entityid and tenantid in a separate table.
Your tables could look like the ones given below. This model is preferred so that having a generic extension table will result in less scalability and could soon be filled with the data volume as usage goes up.
Ticket
TicketExtn (extension table containing custom fields by tenant and entity)
The TicketExtn
table will contain fields like
TicketId
TenantId
FieldId
FieldValue
FieldDataType
etc
When we try to get the data for the Ticket
entity, we will also be getting the data from the TicketExtn
table and be setting the fields in the model.
The BaseModel will look like the one given below
public class ExtendedField
public Guid Id get; set;
public string FieldName get; set;
public Guid DataTypeId get; set;
/// <summary>
/// Can also be a typed class, this is just for reference
/// </summary>
/// <value>The field value.</value>
public string FieldValue get; set;
/// <summary>
/// Incase of using string for fieldvalue, the string to format the value as per the required datatype
/// will be provided here.
/// </summary>
/// <value>The field value format string.</value>
public string FieldValueFormatString get; set;
public class BaseModel
Dictionary<string, ExtendedField> ExtendedRows get; set;
public class Ticket : BaseModel
public int Id get; set;
public string Description get; set;
public DateTime CreationDate get; set;
In your services layer, there will be logic to fill these extended rows. Its better to have the logic for the filling up of the extended rows generic so that for any number of entities, this logic can be re-used.
HTH
Thank you Saravanan, this is the actual implementation the application has. (somet hink like github.com/dubeaud/bugnet), I would like to know if there is a way to have a simplest way to deal with entities, viewmodels and views in a mvc scenario. I'd like to have something like Ticket.MyPropertyTenant1 = "value" without handle with disctionaries, data types etc.
– erre
Mar 24 at 16:21
add a comment |
IMHO, In SaaS, having a single code base and flexible configuration / extension for mutli-tenancy is the key to success.
To enable custom fields per tenant, the business model will have to have a fixed set base fields. The custom fields will have to be stored by entityid and tenantid in a separate table.
Your tables could look like the ones given below. This model is preferred so that having a generic extension table will result in less scalability and could soon be filled with the data volume as usage goes up.
Ticket
TicketExtn (extension table containing custom fields by tenant and entity)
The TicketExtn
table will contain fields like
TicketId
TenantId
FieldId
FieldValue
FieldDataType
etc
When we try to get the data for the Ticket
entity, we will also be getting the data from the TicketExtn
table and be setting the fields in the model.
The BaseModel will look like the one given below
public class ExtendedField
public Guid Id get; set;
public string FieldName get; set;
public Guid DataTypeId get; set;
/// <summary>
/// Can also be a typed class, this is just for reference
/// </summary>
/// <value>The field value.</value>
public string FieldValue get; set;
/// <summary>
/// Incase of using string for fieldvalue, the string to format the value as per the required datatype
/// will be provided here.
/// </summary>
/// <value>The field value format string.</value>
public string FieldValueFormatString get; set;
public class BaseModel
Dictionary<string, ExtendedField> ExtendedRows get; set;
public class Ticket : BaseModel
public int Id get; set;
public string Description get; set;
public DateTime CreationDate get; set;
In your services layer, there will be logic to fill these extended rows. Its better to have the logic for the filling up of the extended rows generic so that for any number of entities, this logic can be re-used.
HTH
IMHO, In SaaS, having a single code base and flexible configuration / extension for mutli-tenancy is the key to success.
To enable custom fields per tenant, the business model will have to have a fixed set base fields. The custom fields will have to be stored by entityid and tenantid in a separate table.
Your tables could look like the ones given below. This model is preferred so that having a generic extension table will result in less scalability and could soon be filled with the data volume as usage goes up.
Ticket
TicketExtn (extension table containing custom fields by tenant and entity)
The TicketExtn
table will contain fields like
TicketId
TenantId
FieldId
FieldValue
FieldDataType
etc
When we try to get the data for the Ticket
entity, we will also be getting the data from the TicketExtn
table and be setting the fields in the model.
The BaseModel will look like the one given below
public class ExtendedField
public Guid Id get; set;
public string FieldName get; set;
public Guid DataTypeId get; set;
/// <summary>
/// Can also be a typed class, this is just for reference
/// </summary>
/// <value>The field value.</value>
public string FieldValue get; set;
/// <summary>
/// Incase of using string for fieldvalue, the string to format the value as per the required datatype
/// will be provided here.
/// </summary>
/// <value>The field value format string.</value>
public string FieldValueFormatString get; set;
public class BaseModel
Dictionary<string, ExtendedField> ExtendedRows get; set;
public class Ticket : BaseModel
public int Id get; set;
public string Description get; set;
public DateTime CreationDate get; set;
In your services layer, there will be logic to fill these extended rows. Its better to have the logic for the filling up of the extended rows generic so that for any number of entities, this logic can be re-used.
HTH
answered Mar 24 at 11:04
SaravananSaravanan
5,09433063
5,09433063
Thank you Saravanan, this is the actual implementation the application has. (somet hink like github.com/dubeaud/bugnet), I would like to know if there is a way to have a simplest way to deal with entities, viewmodels and views in a mvc scenario. I'd like to have something like Ticket.MyPropertyTenant1 = "value" without handle with disctionaries, data types etc.
– erre
Mar 24 at 16:21
add a comment |
Thank you Saravanan, this is the actual implementation the application has. (somet hink like github.com/dubeaud/bugnet), I would like to know if there is a way to have a simplest way to deal with entities, viewmodels and views in a mvc scenario. I'd like to have something like Ticket.MyPropertyTenant1 = "value" without handle with disctionaries, data types etc.
– erre
Mar 24 at 16:21
Thank you Saravanan, this is the actual implementation the application has. (somet hink like github.com/dubeaud/bugnet), I would like to know if there is a way to have a simplest way to deal with entities, viewmodels and views in a mvc scenario. I'd like to have something like Ticket.MyPropertyTenant1 = "value" without handle with disctionaries, data types etc.
– erre
Mar 24 at 16:21
Thank you Saravanan, this is the actual implementation the application has. (somet hink like github.com/dubeaud/bugnet), I would like to know if there is a way to have a simplest way to deal with entities, viewmodels and views in a mvc scenario. I'd like to have something like Ticket.MyPropertyTenant1 = "value" without handle with disctionaries, data types etc.
– erre
Mar 24 at 16:21
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55322140%2fis-it-possible-to-have-different-properties-for-the-same-model-in-multi-tenant-a%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
There is not one-size-fits-all solution for that. It depends very much on how your models differ, how often the requirements change etc.
– Sefe
Mar 24 at 9:00
Hi, I would like to use this approach stackify.com/writing-multitenant-asp-net-core-applications or benfoster.io/blog/… but it seems they share the same models
– erre
Mar 24 at 9:01
If TicketBase class represents bare bone ticket properties and you are not going to ever instantiate Ticketbase class as an object, then instead of TicketBase class you can consider having those properties as a part of ITicket interface. And let multiple tenant implement ITicket + their additional properties. This will also help you leverage multi tenancy DI injection where you can register tenant specific ticket objects and resolve them in your code, based on tenants through ITicket interface...Just another food for thought for your design.
– Asif
Mar 24 at 9:28
Thank you Asif, and How do you would implement it in .net core EF?
– erre
Mar 24 at 16:27