Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. The Lounge
  3. Code First

Code First

Scheduled Pinned Locked Moved The Lounge
databasecomdesignbusinesscollaboration
44 Posts 21 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Marc Clifton

    R1911 wrote:

    Is this something we should definitely aspire to achieve

    No.

    or it's okay to continue with DB first approach?

    Yes. Code often enough wants to see the data in a different way than is best for DB performance and normalization. I prefer to implement the DB first and generate the model (classes) from the DB (as partial classes so I can, if necessary, extend them with helpful properties, and either create views in the DB or views in the code from the model. Furthermore, by specifying my DB models myself and using [FluentMigrator](https://github.com/fluentmigrator/fluentmigrator) and a custom tool that I wrote, I can also specify attributes on the fields that drive the UI behavior, like: {Name: 'IsManager', Type: 'bool', IsDisplayField: true, DisplayName: 'Is Manager?' }, Add comments to the metadata, like: {Name: 'IsCommunityStaff', Type: 'bool', Comment: 'For community cash drawer support.'}, Specify interfaces that the model should implement, like: {Name: 'Fingerprint', Implements: 'IFingerprint', custom formatting (I'm using DevExpress for the UI controls) like:

    {Name: 'TaxRate', Type: 'decimal', ActualType: 'Number4', IsDisplayField: true, DisplayName: 'Tax Rate as %', Format: '###0.0000'},

    drive lookups implemented as dropdowns like: {Name: 'DisputeTypeId', Type: 'int', DisplayName: 'Type', FK: 'DisputeType.Id', IsDisplayField: true, LookupModel: 'DisputeType', LookupField: 'Name' }, and specify initial load of data when creating the DB from scratch, like:

    { Name: 'DisputeType', IsLookup: true, Fields:
    [
    {Name: 'Id', IsPK: true, Type: 'int', IsIdentity: true },
    {Name: 'Code', Type: 'int' },
    {Name: 'Name', Type: 'string', IsDisplayField: true },
    {Name: 'Description', Type: 'string', Nullable: true, IsDisplayField: true },
    ],
    InitialLoad:
    [
    {Code: 0, Name: 'Shopper', Description: 'Did not receive products/services, dissatisfied, not refunded, etc.'},
    {Code: 1, Name: 'Process Error', Description: 'Charged twice, charged incorrect amount.'},
    {Code: 2, Name: 'Fraud', Description: 'Stolen card.'},
    {Code: 3, Name: 'Friendly Fraud', Description: 'Customer claims valid purchase was fraudulent, etc.'},
    {Code: 4, Name: 'Other'},
    ]
    },

    and implement custom code generati

    M Offline
    M Offline
    Mycroft Holmes
    wrote on last edited by
    #21

    I'm curious, do many of your clients development teams adopt this methodology, the level of discipline would need to be quite high. I have fiddled with a number of meta data structures over the years but could never convince a team of junior developers to adopt and adhere to the structures. I ended up with a convention based environment where the first field is a primary key, identity field with the same name as the table +ID. Views with the same name as the table prefixed with vw. All this allows the custom app "ClassBuilder" to generate the procs, DAL and partial UI files from the table/view. ClassBuilder, which I filched in the early 90's, is in use in a number of organisations where I have contracted over the years, primarily because it is relatively simple.

    Never underestimate the power of human stupidity RAH

    M 1 Reply Last reply
    0
    • M Mycroft Holmes

      I'm curious, do many of your clients development teams adopt this methodology, the level of discipline would need to be quite high. I have fiddled with a number of meta data structures over the years but could never convince a team of junior developers to adopt and adhere to the structures. I ended up with a convention based environment where the first field is a primary key, identity field with the same name as the table +ID. Views with the same name as the table prefixed with vw. All this allows the custom app "ClassBuilder" to generate the procs, DAL and partial UI files from the table/view. ClassBuilder, which I filched in the early 90's, is in use in a number of organisations where I have contracted over the years, primarily because it is relatively simple.

      Never underestimate the power of human stupidity RAH

      M Offline
      M Offline
      Marc Clifton
      wrote on last edited by
      #22

      Mycroft Holmes wrote:

      do many of your clients development teams adopt this methodology, the level of discipline would need to be quite high.

      Good question. Given that I am the development team for several of my clients, I can customize my toolset as I choose.

      Mycroft Holmes wrote:

      but could never convince a team of junior developers to adopt and adhere to the structures.

      Conversely, when I've worked with teams, particularly with junior developers, I learned a lesson a long time ago that you don't rely on them to use and maintain the metadata -- they're just not used to thinking in those terms. But what I found did work, and worked quite well, is to provide a UI designer. Junior devs (and even senior devs) feel more comfortable with a designer, rather than mucking around in the XML, JSON, or whatever. And it also gives management the impression that you're using a professional tool, not some half baked roll-your-own implementation (which is what it is under the hood, hahaha.) At one point (2005 or so), I had co-opted the WinForm designer, added a (quite sophisticated) schema designer, a custom scripting language, and embedded the DevExpress report designer, all UI-based. The management and the devs loved it. A lot of work to hide the fact that all it did was generate XML, but it was worth it.

      Latest Article - A Concise Overview of Threads Learning to code with python is like learning to swim with those little arm floaties. It gives you undeserved confidence and will eventually drown you. - DangerBunny Artificial intelligence is the only remedy for natural stupidity. - CDP1802

      1 Reply Last reply
      0
      • M Marc Clifton

        R1911 wrote:

        Is this something we should definitely aspire to achieve

        No.

        or it's okay to continue with DB first approach?

        Yes. Code often enough wants to see the data in a different way than is best for DB performance and normalization. I prefer to implement the DB first and generate the model (classes) from the DB (as partial classes so I can, if necessary, extend them with helpful properties, and either create views in the DB or views in the code from the model. Furthermore, by specifying my DB models myself and using [FluentMigrator](https://github.com/fluentmigrator/fluentmigrator) and a custom tool that I wrote, I can also specify attributes on the fields that drive the UI behavior, like: {Name: 'IsManager', Type: 'bool', IsDisplayField: true, DisplayName: 'Is Manager?' }, Add comments to the metadata, like: {Name: 'IsCommunityStaff', Type: 'bool', Comment: 'For community cash drawer support.'}, Specify interfaces that the model should implement, like: {Name: 'Fingerprint', Implements: 'IFingerprint', custom formatting (I'm using DevExpress for the UI controls) like:

        {Name: 'TaxRate', Type: 'decimal', ActualType: 'Number4', IsDisplayField: true, DisplayName: 'Tax Rate as %', Format: '###0.0000'},

        drive lookups implemented as dropdowns like: {Name: 'DisputeTypeId', Type: 'int', DisplayName: 'Type', FK: 'DisputeType.Id', IsDisplayField: true, LookupModel: 'DisputeType', LookupField: 'Name' }, and specify initial load of data when creating the DB from scratch, like:

        { Name: 'DisputeType', IsLookup: true, Fields:
        [
        {Name: 'Id', IsPK: true, Type: 'int', IsIdentity: true },
        {Name: 'Code', Type: 'int' },
        {Name: 'Name', Type: 'string', IsDisplayField: true },
        {Name: 'Description', Type: 'string', Nullable: true, IsDisplayField: true },
        ],
        InitialLoad:
        [
        {Code: 0, Name: 'Shopper', Description: 'Did not receive products/services, dissatisfied, not refunded, etc.'},
        {Code: 1, Name: 'Process Error', Description: 'Charged twice, charged incorrect amount.'},
        {Code: 2, Name: 'Fraud', Description: 'Stolen card.'},
        {Code: 3, Name: 'Friendly Fraud', Description: 'Customer claims valid purchase was fraudulent, etc.'},
        {Code: 4, Name: 'Other'},
        ]
        },

        and implement custom code generati

        R Offline
        R Offline
        R1911
        wrote on last edited by
        #23

        Article! :-D :thumbsup: thanks!

        M 1 Reply Last reply
        0
        • R R1911

          Entity Framework in agile environment - Design and Architecture Discussion Boards[^] Was reading this thread. Just want to really know, is there really someone who's using Code-first as the standard approach in their project? I've been trying to do this, but somehow the team environment/people rushes towards DB first. Even our boss is not so keen in getting to this :) Is this something we should definitely aspire to achieve or it's okay to continue with DB first approach?

          T Offline
          T Offline
          theokr
          wrote on last edited by
          #24

          There's a lot of waffle in the responses but the truth is as it is for most things... It depends on what you're developing. Some people have alluded to this. I have worked on projects that have used code first effectively. No performance bottlenecks, easy deployments, very neat code. Easy to follow and all in one place. If you have a fairly simple schema to create, code first is not going to be a problem. If you have a more complex schema, then you may have to evaluate it a bit more. I have worked on projects that code the DB first. This gives you the most control and is the more consisitent approach when writing stored procedures, triggers and other object types. If using Visual Studio (assuming as you're using EF) and if you're also using SQL Server then Visual Studio DB projects are great for modelling databases and doing quick and easy deployments. ORMs are great but use with a little caution as you may introduce unnecessary overheads. In summary, to answer your question more directly, yes code first is used for real applicstions/projects. On the question of whether to aspire to it, I do not believe it should be considered a standard or any sort of evolution of development - you would use it based on the merits for your application.

          1 Reply Last reply
          0
          • R R1911

            Entity Framework in agile environment - Design and Architecture Discussion Boards[^] Was reading this thread. Just want to really know, is there really someone who's using Code-first as the standard approach in their project? I've been trying to do this, but somehow the team environment/people rushes towards DB first. Even our boss is not so keen in getting to this :) Is this something we should definitely aspire to achieve or it's okay to continue with DB first approach?

            K Offline
            K Offline
            KBZX5000
            wrote on last edited by
            #25

            We always do code first, but we also follow a very strict and sane DB design principle. "Everything is flat by design and we optimize for lowest complexity." Juniors that optimize for "This is going to be faster and/or more efficient" are getting stabbed with a knife by me personally. People prefer DB first, because they like to decide what the data should look like.. which is also fundamentally wrong. Data already has a defined structure when it gets into your system, and has a defined structure when it comes out. All you need to do is flatten it in a safe way, so you can persistently store it, when it's in between those 2 states. The worst of the bunch are Enterprise folks that go on and on about Business Objects or Domain Objects. They're willfully ignoring their core business (= selling a product or service) in favor of making arbitrary decisions about things they've invented themselves. We call that "having a god complex", because it's fun playing god and creating stuff that people will build for you. I totally get that. But they should do that in Civ5 or something, not at work.

            1 Reply Last reply
            0
            • R raddevus

              This is way too long but your question got me thinking and I just wrote it up. It seems that CodeFirst was a way to get devs to : "Do design in small chunks." Some devs are not going to plan at all. They just start typing code. A lot of those devs were very good at doing this and could really make things happen. But others were terrible at it and created huge maintenance nightmares. So a type of methodology arose out of that which said, "Hey let's make a process out of the idea of typing code. We need to provide a basic process." Just Code It Up In the beginning, many devs just typed code which was imperative in nature -- you tell the code what to do and it does it. Along came OOP. But a lot of devs saw it and just said, "that's a lot of overhead, I can do it faster just by typing up some code" and continued just to "code up a solution". OOP Wave But OOP is about code organization and some people said, "Hey, you need to design things very well and think out everything so you can model the objects in the system and you should have everything planned out so you can go and create the system." But it didn't catch on with a lot of devs because they knew that requirements change and you can't design any large system entirely before building because when you do you miss stuff. But then many devs were like, "Well, we don't want to go back to just coding things up with no plan either." Along Comes Agile Model one domain object and get it working. Get the MVP (minimum viable product) so we can have a bit of design but actually start writing code and having things running very fast. This made the pantsers (coding by the seat of your pants) happy and made the strong OOP devs happier because at least there was some organization and process built into the system. Everything else is just these two factions fighting it out: 1. Pure Agile - (design it on the fly) 2. Heavier process (design more up front / create large domain model ("all" objects in your system)) Reality: Stuck In The Middle Real life is somewhere in between. The Code First thing is a technological process that helps the first group (Pure Agile) to get to what they want with fewer technical barriers. Now they can model an object and it'll be serialized to the database with little work and each time they model a new object their domain model becomes more solid. Of course Code First is also a process that is dev-centric where maybe you have devs that don't have as much experience with dat

              R Offline
              R Offline
              R1911
              wrote on last edited by
              #26

              Oh thanks for the wonderful reply. :thumbsup:

              1 Reply Last reply
              0
              • C CodeWraith

                The bosses always wanted to push the application I am working on to code first. Newer parts work with EF, but there are also more than 20 year old parts that depend on stored procedures. We still need to make changes to the SPs and the data tables. One far away day, when the sun has used up most of its hydrogen and starts to cool down and collapse, we will finaly be rid of all these stored procedures and have EF and the database in a shape that will actually allow code first.

                I have lived with several Zen masters - all of them were cats. His last invention was an evil Lasagna. It didn't kill anyone, and it actually tasted pretty good.

                L Offline
                L Offline
                Lost User
                wrote on last edited by
                #27

                EF without "views" and "stored procedures" is like using C# without the .NET framework classes. EF "complements" the database engine; it doesn't "replace" it.

                "(I) am amazed to see myself here rather than there ... now rather than then". ― Blaise Pascal

                C 1 Reply Last reply
                0
                • F F ES Sitecore

                  Code first is fine for prototyping and knocking out quick things, but it's not suitable for production applications, IMEO.

                  L Offline
                  L Offline
                  Lost User
                  wrote on last edited by
                  #28

                  By definition, a "production" system is past "code first" or "database first"; it's in maintenance mode; which will then probably involve both in one form or another depending on the "fixes" moving forward. A database can have multiple data contexts. A system can have multiple databases. A system "enhancement" can involve adding a new database. Code first or database first?

                  "(I) am amazed to see myself here rather than there ... now rather than then". ― Blaise Pascal

                  F 1 Reply Last reply
                  0
                  • L Lost User

                    By definition, a "production" system is past "code first" or "database first"; it's in maintenance mode; which will then probably involve both in one form or another depending on the "fixes" moving forward. A database can have multiple data contexts. A system can have multiple databases. A system "enhancement" can involve adding a new database. Code first or database first?

                    "(I) am amazed to see myself here rather than there ... now rather than then". ― Blaise Pascal

                    F Offline
                    F Offline
                    F ES Sitecore
                    wrote on last edited by
                    #29

                    What you described is a production environment, not a production system. By production system I meant an application that is intended to go live and be used in a serious business capacity.

                    L 1 Reply Last reply
                    0
                    • R R1911

                      Entity Framework in agile environment - Design and Architecture Discussion Boards[^] Was reading this thread. Just want to really know, is there really someone who's using Code-first as the standard approach in their project? I've been trying to do this, but somehow the team environment/people rushes towards DB first. Even our boss is not so keen in getting to this :) Is this something we should definitely aspire to achieve or it's okay to continue with DB first approach?

                      L Offline
                      L Offline
                      Lost User
                      wrote on last edited by
                      #30

                      If starting from scratch, the advantage of "code first" is that the database that is generated "works" with EF. On the other hand, database first assumes you have the smarts to now "confgure" EF to "consume" whatever convoluted schema someone managed to create using "SQL". Now try and keep the 2 in sync. The skill is in knowing when to use which; or both; and transitioning from one to the other.

                      "(I) am amazed to see myself here rather than there ... now rather than then". ― Blaise Pascal

                      1 Reply Last reply
                      0
                      • R raddevus

                        This is way too long but your question got me thinking and I just wrote it up. It seems that CodeFirst was a way to get devs to : "Do design in small chunks." Some devs are not going to plan at all. They just start typing code. A lot of those devs were very good at doing this and could really make things happen. But others were terrible at it and created huge maintenance nightmares. So a type of methodology arose out of that which said, "Hey let's make a process out of the idea of typing code. We need to provide a basic process." Just Code It Up In the beginning, many devs just typed code which was imperative in nature -- you tell the code what to do and it does it. Along came OOP. But a lot of devs saw it and just said, "that's a lot of overhead, I can do it faster just by typing up some code" and continued just to "code up a solution". OOP Wave But OOP is about code organization and some people said, "Hey, you need to design things very well and think out everything so you can model the objects in the system and you should have everything planned out so you can go and create the system." But it didn't catch on with a lot of devs because they knew that requirements change and you can't design any large system entirely before building because when you do you miss stuff. But then many devs were like, "Well, we don't want to go back to just coding things up with no plan either." Along Comes Agile Model one domain object and get it working. Get the MVP (minimum viable product) so we can have a bit of design but actually start writing code and having things running very fast. This made the pantsers (coding by the seat of your pants) happy and made the strong OOP devs happier because at least there was some organization and process built into the system. Everything else is just these two factions fighting it out: 1. Pure Agile - (design it on the fly) 2. Heavier process (design more up front / create large domain model ("all" objects in your system)) Reality: Stuck In The Middle Real life is somewhere in between. The Code First thing is a technological process that helps the first group (Pure Agile) to get to what they want with fewer technical barriers. Now they can model an object and it'll be serialized to the database with little work and each time they model a new object their domain model becomes more solid. Of course Code First is also a process that is dev-centric where maybe you have devs that don't have as much experience with dat

                        L Offline
                        L Offline
                        Lost User
                        wrote on last edited by
                        #31

                        DB first usually means there's a "DBA Administrator" in the house; which usually means 6 more months before you "get your database".

                        "(I) am amazed to see myself here rather than there ... now rather than then". ― Blaise Pascal

                        R 1 Reply Last reply
                        0
                        • L Lost User

                          DB first usually means there's a "DBA Administrator" in the house; which usually means 6 more months before you "get your database".

                          "(I) am amazed to see myself here rather than there ... now rather than then". ― Blaise Pascal

                          R Offline
                          R Offline
                          raddevus
                          wrote on last edited by
                          #32

                          Gerry Schmitz wrote:

                          DB first usually means there's a "DBA Administrator" in the house; which usually means 6 more months before you "get your database".

                          Very true. The DBA has to get everything right and that takes time. Here's the DBA schedule: 1. 5 months and 3 weeks and 4 days of Candy Crush "work". Must reach level 302!! 2. One day (Friday) of work to design the schema and create the tables on the server. :laugh: :laugh:

                          L 1 Reply Last reply
                          0
                          • R R1911

                            Article! :-D :thumbsup: thanks!

                            M Offline
                            M Offline
                            Marc Clifton
                            wrote on last edited by
                            #33

                            R1911 wrote:

                            Article!

                            Some day. Want to help me write it?

                            Latest Article - A Concise Overview of Threads Learning to code with python is like learning to swim with those little arm floaties. It gives you undeserved confidence and will eventually drown you. - DangerBunny Artificial intelligence is the only remedy for natural stupidity. - CDP1802

                            R 1 Reply Last reply
                            0
                            • F F ES Sitecore

                              What you described is a production environment, not a production system. By production system I meant an application that is intended to go live and be used in a serious business capacity.

                              L Offline
                              L Offline
                              Lost User
                              wrote on last edited by
                              #34

                              No, I'm describing "systems"; "serious" ones: O&G production; Financials; MRP; etc. And AP, AR, GL, FA ... all systems in the "bigger" Financials (system). Nothing about "environment".

                              "(I) am amazed to see myself here rather than there ... now rather than then". ― Blaise Pascal

                              F 1 Reply Last reply
                              0
                              • L Lost User

                                EF without "views" and "stored procedures" is like using C# without the .NET framework classes. EF "complements" the database engine; it doesn't "replace" it.

                                "(I) am amazed to see myself here rather than there ... now rather than then". ― Blaise Pascal

                                C Offline
                                C Offline
                                CodeWraith
                                wrote on last edited by
                                #35

                                That may be so, but these oldschool SPs designed to be used with DataSets, DataTables and DataRows do not have much in common with the Entity Framework.

                                I have lived with several Zen masters - all of them were cats. His last invention was an evil Lasagna. It didn't kill anyone, and it actually tasted pretty good.

                                L 1 Reply Last reply
                                0
                                • R raddevus

                                  Gerry Schmitz wrote:

                                  DB first usually means there's a "DBA Administrator" in the house; which usually means 6 more months before you "get your database".

                                  Very true. The DBA has to get everything right and that takes time. Here's the DBA schedule: 1. 5 months and 3 weeks and 4 days of Candy Crush "work". Must reach level 302!! 2. One day (Friday) of work to design the schema and create the tables on the server. :laugh: :laugh:

                                  L Offline
                                  L Offline
                                  Lost User
                                  wrote on last edited by
                                  #36

                                  And at that point, Applications Development needs to add another 6 months because "5th normal form" was not what they had in mind.

                                  "(I) am amazed to see myself here rather than there ... now rather than then". ― Blaise Pascal

                                  1 Reply Last reply
                                  0
                                  • R R1911

                                    Entity Framework in agile environment - Design and Architecture Discussion Boards[^] Was reading this thread. Just want to really know, is there really someone who's using Code-first as the standard approach in their project? I've been trying to do this, but somehow the team environment/people rushes towards DB first. Even our boss is not so keen in getting to this :) Is this something we should definitely aspire to achieve or it's okay to continue with DB first approach?

                                    M Offline
                                    M Offline
                                    maze3
                                    wrote on last edited by
                                    #37

                                    Because I haven't spent the time to figure out how to code first write Clustered-Primary Key constraint, foreign key cascading rules, some foreign keys without requirement constraint, additional indexes that I can see a mile away. And that one bad time when I first started a code first project, then looked at the database and cried for all the 20+ character long guid names it attached to everything.

                                    1 Reply Last reply
                                    0
                                    • L Lost User

                                      No, I'm describing "systems"; "serious" ones: O&G production; Financials; MRP; etc. And AP, AR, GL, FA ... all systems in the "bigger" Financials (system). Nothing about "environment".

                                      "(I) am amazed to see myself here rather than there ... now rather than then". ― Blaise Pascal

                                      F Offline
                                      F Offline
                                      F ES Sitecore
                                      wrote on last edited by
                                      #38

                                      Quote:

                                      By definition, a "production" system is .. in maintenance mode

                                      That reads to me that you were referring to the environment. If you actually meant "serious" apps, then what you said is that by definition serious apps are in maintenance mode and that makes no sense. That's how I read it anyway.

                                      L 1 Reply Last reply
                                      0
                                      • C CodeWraith

                                        That may be so, but these oldschool SPs designed to be used with DataSets, DataTables and DataRows do not have much in common with the Entity Framework.

                                        I have lived with several Zen masters - all of them were cats. His last invention was an evil Lasagna. It didn't kill anyone, and it actually tasted pretty good.

                                        L Offline
                                        L Offline
                                        Lost User
                                        wrote on last edited by
                                        #39

                                        You're assuming every SP returns a result set; they don't. And a "datatable row" is the equivalent of an entity. One purpose of SP's is to execute logic on the DB server that has no business running on the client. No SP's usually means: simplistic design; or poor design and poor performance.

                                        "(I) am amazed to see myself here rather than there ... now rather than then". ― Blaise Pascal

                                        1 Reply Last reply
                                        0
                                        • F F ES Sitecore

                                          Quote:

                                          By definition, a "production" system is .. in maintenance mode

                                          That reads to me that you were referring to the environment. If you actually meant "serious" apps, then what you said is that by definition serious apps are in maintenance mode and that makes no sense. That's how I read it anyway.

                                          L Offline
                                          L Offline
                                          Lost User
                                          wrote on last edited by
                                          #40

                                          In my world, there is "new development" and "maintenance". (Proposed) "Systems" are analyzed (existing physical and logical); designed (logical and physical); developed; tested; integrated; documented; implemented (i.e. "put into production"); then, turned over for "support and maintenance" (by the group responsible for that area). If you're a one man show, maybe you're always "in development" and don't ever get to "turn it over". Actually, you better be clear knowing where "development" ends and "maintenance" begins: That's what "service contracts" are for (and that's where your long term revenue OR expense comes from).

                                          "(I) am amazed to see myself here rather than there ... now rather than then". ― Blaise Pascal

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups