<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="http://skysigal.com/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="http://skysigal.com/feed.php">
        <title>Notes it:ad:code_first</title>
        <description></description>
        <link>http://skysigal.com/</link>
        <image rdf:resource="http://skysigal.com/lib/tpl/bootstrap3/images/favicon.ico" />
       <dc:date>2026-06-15T12:41:00+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="http://skysigal.com/it/ad/code_first/codemigration?rev=1699068131&amp;do=diff"/>
                <rdf:li rdf:resource="http://skysigal.com/it/ad/code_first/dataannotations?rev=1699068132&amp;do=diff"/>
                <rdf:li rdf:resource="http://skysigal.com/it/ad/code_first/dbcontext_initialization?rev=1699068133&amp;do=diff"/>
                <rdf:li rdf:resource="http://skysigal.com/it/ad/code_first/dbcontext_seeding?rev=1699136535&amp;do=diff"/>
                <rdf:li rdf:resource="http://skysigal.com/it/ad/code_first/dbcontext?rev=1699068132&amp;do=diff"/>
                <rdf:li rdf:resource="http://skysigal.com/it/ad/code_first/deployment?rev=1699068133&amp;do=diff"/>
                <rdf:li rdf:resource="http://skysigal.com/it/ad/code_first/entities?rev=1699068135&amp;do=diff"/>
                <rdf:li rdf:resource="http://skysigal.com/it/ad/code_first/faqs?rev=1699068136&amp;do=diff"/>
                <rdf:li rdf:resource="http://skysigal.com/it/ad/code_first/fluentapi?rev=1699136536&amp;do=diff"/>
                <rdf:li rdf:resource="http://skysigal.com/it/ad/code_first/glossary?rev=1699136536&amp;do=diff"/>
                <rdf:li rdf:resource="http://skysigal.com/it/ad/code_first/home?rev=1699068137&amp;do=diff"/>
                <rdf:li rdf:resource="http://skysigal.com/it/ad/code_first/issues?rev=1699136537&amp;do=diff"/>
                <rdf:li rdf:resource="http://skysigal.com/it/ad/code_first/migrations?rev=1699068139&amp;do=diff"/>
                <rdf:li rdf:resource="http://skysigal.com/it/ad/code_first/querying?rev=1699068140&amp;do=diff"/>
                <rdf:li rdf:resource="http://skysigal.com/it/ad/code_first/repositories?rev=1699068140&amp;do=diff"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="http://skysigal.com/lib/tpl/bootstrap3/images/favicon.ico">
        <title>Notes</title>
        <link>http://skysigal.com/</link>
        <url>http://skysigal.com/lib/tpl/bootstrap3/images/favicon.ico</url>
    </image>
    <item rdf:about="http://skysigal.com/it/ad/code_first/codemigration?rev=1699068131&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-11-04T03:22:11+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>IT:AD:Code First:CodeMigration</title>
        <link>http://skysigal.com/it/ad/code_first/codemigration?rev=1699068131&amp;do=diff</link>
        <description>IT:AD:Code First:CodeMigration

	* (UP)
code_first index



	&quot;Note: An interesting thing to note is that this is the first time I&#039;ve noticed MS using the Package Manager Console for far more that Packaging. They&#039;re using it as a completely new way to script up VS operations. Worth Keeping an eye on future developments in this direction.</description>
    </item>
    <item rdf:about="http://skysigal.com/it/ad/code_first/dataannotations?rev=1699068132&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-11-04T03:22:12+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>IT:AD:Code First:DataAnnotations</title>
        <link>http://skysigal.com/it/ad/code_first/dataannotations?rev=1699068132&amp;do=diff</link>
        <description>IT:AD:Code First:DataAnnotations

	* (UP)
code_first index



Summary

	&quot;Important: the use of `DataAnnotations` is not recommended in anything but a POC.
	* Domain Entities should be in their own assembly.
	* Decorating domain  with Attributes drag in -- and therefore to all assemblies referring to domain entities (ie everywhere)</description>
    </item>
    <item rdf:about="http://skysigal.com/it/ad/code_first/dbcontext_initialization?rev=1699068133&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-11-04T03:22:13+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>IT:AD:Code First:Initialization</title>
        <link>http://skysigal.com/it/ad/code_first/dbcontext_initialization?rev=1699068133&amp;do=diff</link>
        <description>IT:AD:Code First:Initialization

	* (UP)
code_first index



Notes



IDatabaseInitializer

	* When the db is first created, it creates a Db table called EdmMetadata.
		* Schema is simple: [Id | ModelHash], with a clustered index on Id. That appears to be it.

	* Changes to the entity schema will cause:</description>
    </item>
    <item rdf:about="http://skysigal.com/it/ad/code_first/dbcontext_seeding?rev=1699136535&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-11-04T22:22:15+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>IT:AD:Code First:Seeding</title>
        <link>http://skysigal.com/it/ad/code_first/dbcontext_seeding?rev=1699136535&amp;do=diff</link>
        <description>IT:AD:Code First:Seeding

	* (UP)
code_first index



Define the Database Initializer

Somewhere early, define this:
Database.SetInitializer(new MyInitializer());
This will be a custom implementation of IDatabaseInitializer that enherits from a well-known strategy:
//Invoke *early*, eg from a Boottrapper:
//Database.SetInitializer&lt;GraphContext&gt;(new GraphInitializer());
public class MyInitializer : DropCreateDatabaseIfModelChanges&lt;TestContext&gt;
{
  ...

  protected override void Seed(GraphContext …</description>
    </item>
    <item rdf:about="http://skysigal.com/it/ad/code_first/dbcontext?rev=1699068132&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-11-04T03:22:12+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>IT:AD:Code First:DbContext</title>
        <link>http://skysigal.com/it/ad/code_first/dbcontext?rev=1699068132&amp;do=diff</link>
        <description>IT:AD:Code First:DbContext

	* (UP)
code_first index



An EF DbContext is an “occasionally-connected”,  “in-memory” representation of the remote database.

In other words, in its simplest form, a DbContext is rather like a DataSet of the whole database, keeping track of changes made to its in-mem tables, and only committing those changes back to the database when the</description>
    </item>
    <item rdf:about="http://skysigal.com/it/ad/code_first/deployment?rev=1699068133&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-11-04T03:22:13+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>IT:AD:Code First:Deployment</title>
        <link>http://skysigal.com/it/ad/code_first/deployment?rev=1699068133&amp;do=diff</link>
        <description>IT:AD:Code First:Deployment

	* (UP)
code_first index



Deployment

Warning: Code first has no change tracking story. The process to follow is:

* Read this -- might be useful: &lt;http://weblogs.asp.net/jgalloway/archive/2011/02/24/generating-ef-code-first-model-classes-from-an-existing-database.aspx&gt;

	* For the future:
	*  See &#039;Code First Migrations&#039; (&lt;http://bit.ly/s9ASt2&gt;)


Db Initialization

Excellent in depth analysis of the steps happening under the covers:
*</description>
    </item>
    <item rdf:about="http://skysigal.com/it/ad/code_first/entities?rev=1699068135&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-11-04T03:22:15+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>IT:AD:EF/CodeFirst/Entities</title>
        <link>http://skysigal.com/it/ad/code_first/entities?rev=1699068135&amp;do=diff</link>
        <description>IT:AD:EF/CodeFirst/Entities

	* (UP)
code_first index



CheckList

	* MSDN:Conventions
	* MSDN:Code First Data Annotations
	* &lt;http://msdn.microsoft.com/en-us/library/system.data.entity.modelconfiguration.conventions&gt;(v=vs.103).aspx
* Important: For Automapper to populate Navigation properties, etc. the properties must have a set. They can be protected, or private (Automapper can handle that, but they have to be there.</description>
    </item>
    <item rdf:about="http://skysigal.com/it/ad/code_first/faqs?rev=1699068136&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-11-04T03:22:16+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>IT:AD:Code First:FAQs</title>
        <link>http://skysigal.com/it/ad/code_first/faqs?rev=1699068136&amp;do=diff</link>
        <description>IT:AD:Code First:FAQs

	* (UP)
code_first index



Questions

	* What&#039;s marking a property virtual do?
		* That makes Scalar properties
	*  Makes Collection Navigation Properties lazy-loadable.

* Is FK detection (for relationships) case sensitive?

		* No.</description>
    </item>
    <item rdf:about="http://skysigal.com/it/ad/code_first/fluentapi?rev=1699136536&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-11-04T22:22:16+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>IT:AD:Code First:FluentAPI</title>
        <link>http://skysigal.com/it/ad/code_first/fluentapi?rev=1699136536&amp;do=diff</link>
        <description>IT:AD:Code First:FluentAPI

	* (UP)
code_first index



Example:
public class OurDbContext : DbContext {

  protected override void OnModelCreating(ModelBuilder modelBuilder)
  {
    modelBuilder.Entity&lt;Department&gt;().Property(dp =&gt; dp.Name).IsRequired();
    modelBuilder.Entity&lt;Manager&gt;().HasKey(ma =&gt; ma.ManagerCode);
    modelBuilder.Entity&lt;Manager&gt;().Property(ma =&gt; ma.Name)
        .IsConcurrencyToken(true)
        .IsVariableLength()
        .HasMaxLength(20);
  }
}</description>
    </item>
    <item rdf:about="http://skysigal.com/it/ad/code_first/glossary?rev=1699136536&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-11-04T22:22:16+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>IT:AD:Code First:Glossary</title>
        <link>http://skysigal.com/it/ad/code_first/glossary?rev=1699136536&amp;do=diff</link>
        <description>IT:AD:Code First:Glossary

	* (UP)
code_first index


	* Navigation Property: provides a way to navigate a relationship to either:
		* Reference Object (if multiplicity is: 1 or 0-1)
		* Collection (if multiplicity: 0-n)</description>
    </item>
    <item rdf:about="http://skysigal.com/it/ad/code_first/home?rev=1699068137&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-11-04T03:22:17+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>IT:AD:Code First</title>
        <link>http://skysigal.com/it/ad/code_first/home?rev=1699068137&amp;do=diff</link>
        <description>IT:AD:Code First

	* (UP)
code_first index




 IT:AD:Code First:FAQs
* IT:AD:Code First:Glossary
* 
* IT:AD:Code First:HowTo
* See also:

	*  IT:AD:LiquidBase

...

Errata

	* &lt;http://romiller.com/2014/06/10/reducing-code-first-database-chatter/&gt;

ACiD

	* Advantages:
		* The most DDD of all options (more so than IT:AD:EF:DatabaseFirst, ).

	* Considerations:
		* Can begin work with Entities before a Db even exists.
		* Deployment is a different story.</description>
    </item>
    <item rdf:about="http://skysigal.com/it/ad/code_first/issues?rev=1699136537&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-11-04T22:22:17+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>it:ad:code_first:issues</title>
        <link>http://skysigal.com/it/ad/code_first/issues?rev=1699136537&amp;do=diff</link>
        <description>Error message:
        modelBuilder.Entity&lt;RoutingRule&gt;()
            .HasOptional(m=&gt;m.WorkflowStep)
            .WithMany()
            .HasForeignKey(m=&gt;m.WorkflowStepFK);
            
            
                    //IsRequired
    public virtual int WorkflowStepFK { get; set; }
    public virtual WorkflowStep WorkflowStep { get; set; }
    
    
    \tSystem.Data.Entity.Edm.EdmAssociationType: : Multiplicity conflicts with the referential constraint in Role &#039;RoutingRule_WorkflowStep_Targe…</description>
    </item>
    <item rdf:about="http://skysigal.com/it/ad/code_first/migrations?rev=1699068139&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-11-04T03:22:19+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>IT:AD:Code First:Migrations</title>
        <link>http://skysigal.com/it/ad/code_first/migrations?rev=1699068139&amp;do=diff</link>
        <description>IT:AD:Code First:Migrations

	* (UP)
code_first index



	&quot;Note: An interesting thing to note is that this is the first time I&#039;ve noticed MS using the Package Manager Console for far more that Packaging. They&#039;re using it as a completely new way to script up VS operations. Worth Keeping an eye on future developments in this direction.</description>
    </item>
    <item rdf:about="http://skysigal.com/it/ad/code_first/querying?rev=1699068140&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-11-04T03:22:20+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>IT:AD:Code First:Querying</title>
        <link>http://skysigal.com/it/ad/code_first/querying?rev=1699068140&amp;do=diff</link>
        <description>IT:AD:Code First:Querying

	* (UP)
	* See also:
		* IT:AD:EF:Querying
		* 


WARNING: Stored procs are not officially supported in EF5 -- they are on the roadmap for [EF6]{&lt;http://blogs.msdn.com/b/wriju/archive/2012/07/19/entity-framework-5-and-6-roadmap.aspx&gt;}

Process

Using EF5:

	* The basics are:
		* http://stackoverflow.com/questions/4845246/does-entity-framework-code-first-support-stored-procedures
		* http://blogs.msdn.com/b/wriju/archive/2011/05/14/code-first-4-1-using-stored-procedure-…</description>
    </item>
    <item rdf:about="http://skysigal.com/it/ad/code_first/repositories?rev=1699068140&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-11-04T03:22:20+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>IT:AD:Code First</title>
        <link>http://skysigal.com/it/ad/code_first/repositories?rev=1699068140&amp;do=diff</link>
        <description>IT:AD:Code First

	* (UP)
code_first index



----------

Example
public class EFRepository : IGraphRepository&lt;GraphVertex, int, IGraphEdge&lt;GraphVertex&gt;&gt;
{
        private readonly GraphContext _graphContext = new GraphContext();

        public void Persist(params GraphVertex[] vertices)
        {
            foreach(GraphVertex vertex in vertices)
            {
                bool isDetached = ((int)_graphContext.Entry(vertex).State).BitIsSet((int)EntityState.Modified);

                if (v…</description>
    </item>
</rdf:RDF>
