ADO.NET :: EF Code First CTP5 Not Generating The Database?
Jan 22, 2011
I've been using EF as my primary ORM for quiet some time now. Today I decided to use EF Code First to create my model for my new project. So I went ahead and read a bunch of documents on MSDN and some blog posts by Scott Guthrie and others. Unfortunately, what I've read does not go beyond the basics of using Code First within an ASP.NET MVC application. But as you might know, in real-world applications the structure of the solution is a little different. Anyway, to make a long story short:
- I created all the POCO files that will be needed.
- I created the SharweEntities class which extends the DbContext class.
- I added the following connection string to my Web.config file
[Code]....
Then I started the application and checked whether a new database was created inside SQL Server 2008 Express, but found nothing. I'm not sure what's wrong but I suspect it might be the way I'm structuring my solution? Here's the structure:
- Sharwe.MVC : The ASP.NET MVC3 Web Application (has nothing except a HomeController and a corresponding simple view at the time being)
- Sharwe.Data : model class and data access logic (contains all the POCO classes and the SharweEntities class)
- Sharwe.Services : Business logic
Here's an image that shows the structure of my solution:
You can find the source code demonstrating this issue @ http://code.google.com/p/contactsctp5/
I have three model objects. Contact,ContactInfo,ContactInfoType. Where a contact has many contactinfo's and each contactinfo is a contactinfotype. Fairly simple I guess. The problem I'm running into is when I go to edit the contact object. I pulled it from my contact repository. Then I run "UpdateModel(contact);" and it updates the object with all the values from my form. (monitoring with debug) When I save the changes though, I get the following error:
The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted.
It seems like after I call update model it nulls out my references and this seems to break everything?
Here are my models:
public partial class Contact { public Contact() { this.ContactInformation = new HashSet<ContactInformation>(); } public int ContactId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public virtual ICollection<ContactInformation> ContactInformation { get; set; } } public partial class ContactInformation { public int ContactInformationId { get; set; } public int ContactId { get; set; } public int ContactInfoTypeId { get; set; } public string Information { get; set; } public virtual Contact Contact { get; set; } public virtual ContactInfoType ContactInfoType { get; set; } } public partial class ContactInfoType { public ContactInfoType() { this.ContactInformation = new HashSet<ContactInformation>(); } public int ContactInfoTypeId { get; set; } public string Type { get; set; } public virtual ICollection<ContactInformation> ContactInformation { get; set; } }
there are some way of generating the application form source code for an database tables in c#, but i not need a dynamic application form like Scaffolding i need the source code of application form
Im a fan of the EF code first and with its last preview of the CTP5 I wonder if it would be safe for me to use this for a smaller site for customer? I would love to get your opinions on this? And any good sources for tutorials and information would be sweet. I'm currently reading the post on scottgu's blog about it.
But it creates the relationship (and the third mapping table) with cascade delete switched off by default. How can I tell EF to create the relationship with cascade delete switched on when using many-to-many?
public class Category { public int CategoryId { get; set; } public string Name { get; set; } } public partial class CategoryMap : EntityTypeConfiguration<Category> { public CategoryMap() { this.HasKey(c => c.CategoryId); this.Property(c => c.Name).IsRequired().HasMaxLength(400); } } public class MyObjectContext : DbContext { public MyObjectContext(string connectionStringName) : base(connectionStringName) { } public DbSet<Category> Categories { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Configurations.Add(new CategoryMap()); base.OnModelCreating(modelBuilder); } }
Now when I run the following code I get an exception (GenericArguments[0], 'System.Int32', on 'System.Data.Entity.Internal.Linq.ReplacementDbQueryWrapper`1[TEntity]' violates the constraint of type 'TEntity')
DbDatabase.SetInitializer<MyObjectContext>(new DropCreateDatabaseIfModelChanges<MyObjectContext>()); using (var context = new MyObjectContext("NopSqlConnection")) { var query1 = from c in context.Categories select c.CategoryId; var test1 = query1.ToList(); //works fine var query2 = from c in context.Categories where query1.Contains(c.CategoryId) orderby c.Name descending select c; var test2 = query2.ToList(); //throws the exception }
In my .aspx.cs I have a code that reads a .xml file and I deserialize the xml into an object called Post. Problem is that in my .aspx page I have a div and I want to fill in the content of this div from code behind using the html generated from the code behind.. How can I do this?
In some crucial projects I relelized that time is one of the biggest concern while developing a project, specially a web application. I specifically about ASP.NET, does any Open Source tools exists for generating code for helping developers [like codesmith] to work smarter rather than work harder?
I have a GridView inside of an UpdatePanel and the buttons for edit and delete into a templatefield
For the delete button, I also have a modalPopup extender and a confirmButtonExtender, due to the problem of the pannels flashing momentarily (and that is very ugly) I have created a css class with display:none
for the delete button I have created a javascript function called changeVisibility(id) to change the visibility
Here ir some code:
[Code]....
The problem is that when I execute the page, imagebutton onclientclick appears like this:
onClick=""
why is asp.net not processing correctly that, and, if you know another way to hide the panels before they flash on startup,
I am generating xhtml in code that is then inserted into the page. Are there class(es) that help with adding tags etc. Then having a function that will output it to a string. (like the xml dom api) code like:
I am dynamically generating script code to return transaction data to Google Analytics using their ecommerce script. The code that generates the script is fully tested and functional on my development machine and when I view the page code the script, along with any values that were passed to it, can be seen above the </form> tag. Happy days, or so I thought. For some reason the code is not being generated when I test it in a live, hosted environment. I cant figure out why this is the case as the code is quite simple. I simply generate the script code and register it on the client side (see code below)
//Capture the transaction data for analytics ecommerce tracking //Generate the necessary script code string strAnalyticsEcommerceScript = Analytics_Ecommerce_Script_Creator(); //Register the script on the page Page.ClientScript.RegisterStartupScript(this.GetType(), "AnalyticsScript", strAnalyticsEcommerceScript);
The page in question is called "Order-Successfull" and is where customers are sent to when they have succesfully payed for an order. On this page:
-The order is added to the orders database table - The customer is emailed an order confirmation email - The google analytics script is generated and registered
The Sequence is as follows:
[Code]....
Whats really interesting is that if I move the Analytics script creator code before the code that sends the emails, the script is generated and can be seen when I view the page code. If I do this, however, the emails do not get sent. If I lay the code out as per the code I have inserted in this post, the emails get sent but the script code is not placed on the page.. The code to that actually sends the emails is quite standard:
This is something I asked about a long time ago but there wasn't really a solution available at the time. There was talk of there being changes in a new roll out of EF where existing databases based on a model were simply ammended instead of being dropped and recreated every time.I was wondering if anyone knows whether or not there is something out there now that will let me retain the existing data when making changes to a model? If not, what is the best way for me to back up the data prior to a change and restore it post-change?
I'm using Visual Studio 2010 RTM and MS Sql Server 2008 R2 EXPRESS with Advanced Services.I create a new simple asp.net web site. When I click on asp.net configuration, it opens as expected.When I click on the Security Tab, I get the message, Unable to connect to SQL Server database.It will not create the default aspnetdb.mdf file.I can create a connection to the sql server in VS from the database explorer.I can connect to the sql server with sqlcmd as a trusted connection.I have even managed to verify the default instance of .SQLEXPRESS with named pipesusing the sc command and the MSSQL$instance name.I have verified that my machine dot config file for the 2.0 .net contains the proper info (without altering it).I've spent many nights trying to figure this one out.VS2008 and MS SQL Server EXPRESS 2008 worked.I noticed that the default asp.net web site uses a connection other than the default localsqlserverand the template automatically adds a login in the ui with role, membership & profile in the web config.
I wonder if its safe to use the CTP5 in production yet. My main use would be for 2 small projects. I Know they pre released it but any thoughts on this if it would hold up for production are welcome.
I have a problem with strange generate sql in ef4 ctp5. I have simple model with mapping :
[Table("post_auction")] public class PostAuction { [Key,Column(Name="Id"),DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGenerationOption.Identity)] public int Id { get; set; } [Column(Name = "Number")] public int Number { get; set; } [Column(Name = "Label")] public string Label { get; set; } [Column(Name = "Description")] public string Description { get; set; } [Column(Name = "CategoryId")] public int PostAuctionCategoryId { get; set; } [Column(Name = "PriceCZK")] public int PriceCZK { get; set; } [NotMapped] public bool IsAuctionPhotoExitst { get { if (File.Exists(HttpContext.Current.Server.MapPath("~/Public/Images/Posts/Thumbs/small_" + this.Number + ".jpg"))) return true; return false; } } }
But I am getting error that parameters not found. Looking at the sql trace I can see that CTP5 is sending "default" value if any of my parameters is null instead of the null value.
I'm working on a MVC3 application and I created my POCO classes from my database with the DbContext Code Generator. All goes fine until I got stuck in this situation. Note that I use the repository pattern and I use for every entity a dedicated repository that every get a new instance of the DbContext.
Now, I'm in this situation:
object A has a relation one-to-many with B (A can have one or many B) object B has a relation many-to-one with C (C can have one or many B) object B has a relation many-to-one with D (D can have one or many B)
I should add a new object B, consider that object C and D are yet existing, so I must only do the relation and the object A can be created or updated. In the specific consider that A is customer and B is subscriptions (C and D are virtual objects properties in the B).Now If I try to save I got duplicates in C and D tables, while the management of the object seems to work.
Here's the code: [Code]....
And here the add and the save method of the customer repository: [Code]....
Should I check for every relation and modify the state of the entry to Unchanged or something like that ?
I have a designer working on several pages in Dreamweaver. The designer is creating .aspx files with the Page directive at the top. These are getting shipped to me and I'm adding them to the Visual Studio ASP.NET WebForms Web Application Project. The problem is that there's no code-behind file by default, and I'm trying to find a shortcut to have them autogenerated as if I've added a fresh page from Visual Studio.
I have several web sequential pages which will modify a record and its child records in the database, called a "project". Such a project is currently passed between pages using its database ID in the URL parameters.
A project has some information specific to itself, and also consists of one or more Tasks, which each have information specific to itself.
Is it faster (alternatively, more maintainable or more easily understood) to hit the database each time I need to query the same project (and its tasks), or should I query the database once (either once for each page or once for all pages and save to Session) and check the saved object rather than the database?
Web service error response (code/message etc) would you store it in a database? or would you keep the error response in a method.By the time I'm done with this, there will be hundreds of error response, maybe in the future, thousands? (I dont know yet, depends how large this web service grows).EDIT: error response is the response returned back to the application via the web service, (not to be confused with error logging).
I'm trying to rework some code I've found, and it's all now working except for the date (dbDate). I need to keep it as a date value (and not convert to string), but I can't get the code to work: