C# - Mapping NHibernate Many-to-one Relationships From Abstract Base Classes To Union-subclasses?
Nov 19, 2010
I am having a problem mapping a many-to-one relationship from an abstract base class mapping to a concrete union-subclass. Example:
public abstract class Entity
{
public virtual Guid ID {get; set;}
public virtual string Name {get;set;}
public virtual User OwnerUser {get; set;}
}
public class User : Entity
{
public virtual string UserName {get; set;}
}
I have a base abstract class for all of my database objects. I am mapping these classes with the Entity class as the abstract mapping class and the User as a union-subclass. When creating the configuration object, no errors are thrown and the Schema exports just fine. However, the field to the OwnerUser just won't show up in the database for all of the concrete classes. Here is an example of how the mapping looks
I am also using an Oracle XE instance as the database backend. If this isn't enough information to properly answer the question, let me know and I will add what I can.
I am following the Nerd Dinner tutorial as I'm learning ASP.NET MVC, and I am currently on Step 3: Building the Model. One part of this section discusses how to integrate validation and business rule logic with the model classes. All this makes perfect sense. However, in the case of this source code, the author only validates one class: Dinner.
What I am wondering is, say I have multiple classes that need validation (Dinner, Guest, etc). It doesn't seem smart to me to repeatedly write these two methods in the partial class:
[code]....
This doesn't "feel" right, but I wanted to check with SO to get opinions of individuals smarter than me on this. I also tested it out, and it seems that the partial keyword on the OnValidate method is causing problems (understandably so). This doesn't seem possible to fix (but I could very well be wrong).
I don't know if this has to do with how FindControl works or how scope works. But my base class is having a hard time seeing the fields of child classes. Currently I'm planning have the derived class set a property in the base class, but there are a lot of derived classes, so that isn't a very attractive solution.
how to create C# classes to represent one to many relationships in C#. I have a Customer and an Address table in my database. I also have a Customer class in my C# solution but how do I introduce the multiple address element? Do I have a separate Address class? Do I create a subclass in the Customer class or create a method in Customer called GetAddresses of type List which contains all of the relevant logic? In my code I need to be able to return a customer with all associated addresses and I just cannot picture the best way to achieve this using OOP.
I'm building a web app that will keep a events in a database and add the event to a Google calendar on insertion.
I have three types of events, PendingEvents, ApprovedEvents, and DeniedEvents. I'm using single table inheritance through LINQ-to-SQL, with the Event class being abstract and the 3 types inheriting from it
Each type of Event is stored in calendars differently. I would like to use an abstract member function in Event called AddToCalendar.
I'm trying to set this up in a separate class file because I'm using the LINQ-to-SQL designer and I don't want these to be overwritten if I change the LINQ diagram.
However, I get an error from all three inherited classes that "'WebCal.ApprovedEvents' does not implement inherited abstract member 'Edu.Northwestern.WebCal.Event.AddEventToCalendar()' WebCalendarWebApplication1App_CodeWebCalDataSource.designer.cs"
It looks like it won't check my outside file and only looks at the designer.
The non-designer partial class file looks something like this:
public partial class WebCalDataSourceDataContext : System.Data.Linq.DataContext {
I have a dropdown list on an ASP.NET MVC project that I am pretty sure is not binding to my model because of my nhibernate mapping. I have tried many variations on the asp mvc side resulting in this post here. MVC side of things seems fine I believe the issue may be that my object is trying to bind, but my mapping is out of whack.
My View gives an error saying that the GUID from the dropdownList selected value is not valid. Which I think may be that it is trying to push the GUID into my related project object.
The value 'fd38c877-706f-431d-b624-1269184eeeb5' is invalid.
My related project list binds to the dropdown list just fine, it is just not binding to my models Project entity.
I am trying to configure NHibernate on my console application in which I am trying to map an Employee class to a table Employee.I am getting below exception which I have no clue:
Class: class Employee { public int id; public string name; [code]...
I'm working on a RoleProvider in .NET, using Fluent NHibernate to map tables in an Oracle 9.2 database.
The problem is that the many-to-many table connecting users and roles uses a primary key generated from a sequence, as opposed to a composite key. I can't really change this, because I'm writing it to be implemented in a larger existing system.
Here is my UserMap:
public UserMap() { this.Table("USR");[code].....
Yet, this is giving me the error:
Type 'FluentNHibernate.Cfg.FluentConfigurationException' in assembly 'FluentNHibernate, Version=1.0.0.593, Culture=neutral, PublicKeyToken=8aa435e3cb308880' is not marked as serializable.
Is there a simple fix to allow this HasMayToMany to use my PersistentObjectMap extension? I'm thinking I may have to add a convention for this many-to-many relationship, but I don't know where to start with that, since I've just started using NHibernate and Fluent NHibernate only recently.
EDIT: I think I've found a possible solution here: http://marekblotny.blogspot.com/2009/02/fluent-nhbernate-and-collections.html
I'll try the above method of creating an entity and a class map for the linking table and post my findings.
EDIT 2: I created a linking entity as mentioned in the above blog post and downloaded the newest binaries (1.0.0.623). This helped me discover that the issue was with setting lazy load and trying to add roles to the user object in a completely new session.
I modified the code to move OpenSession to the BeginRequest of an HttpModule as described here. After doing this, I changed my data access code from wrapping the open session in a using statement, which closes the session when it is finished, to getting the current session and wrapping only the transaction in a using statement.
This seems to have resolved the bulk of my issue, but I am now getting an error that says "Could not insert collection" into the USR_ROLE table. And I'm wondering if the above code should work with a UserRoleMap described as:
public UserRoleMap() { this.Table("USR_ROLE"); [code]....
Hibernate's documentation for many-to-many relationship suggests creating an object to maintain a one-to-many/many-to-one, as in an ERD. I'm sure this would be much easier with conventional naming standards, but I have to stick with certain abbreviations and odd (and not always properly-implemented) conventions.
I am trying to setup a base product class that will be inherited by a more specific class later. Here is my scenario. I have a table called ProductBase, it contains three fields, BaseProductId(PK), CatalogNum, and ListPrice. Every product in the system will share these attributes. Next, I have a table called Shirt, with three fields BaseProductId(PK, FK), Color, and Size.
I then setup an Entity Data Model that pulled in both of these tables, and created to classes BaseProduct and Shirt.
So, in my model, I want to do something like this:
[Code]....
The problem I have with this approach, is that I cannot force the properties for the Shirt. What if I make a change to the BaseProduct? What happens when I have multiple product types, will I have to repeat this code?
I got loads of website, that share one of two baseclasses. I need the two baseclasses to be able to share part of the same code. I dont want to have to duplicate the shared code per baseclass.
so.. I got a page.aspx that inherits the baseclass and that inhertis 'sub' baseclass that inherits the web.ui.page class. So far so good :-)
In my baseclass I got a Public (at the top of the class not in any method- not sure of the proper term) Varable that is constructed from a structure in the BO class.
it Public PageDetails AS CoreDomainSetupBO.GetStartUpDetails = {database method}
I need the pagedetails to be available in the sub baseclass but it cant be defined there as the page details value is defined differently in the different base classes.
I hope that makes sense, I need to sub base class to be able to use a property that is defined at baseclass level.
I have a BasePage class that all of my content pages inherit from. In my BasePage, I have many Import Statements. It seems as though they carry over into the derived class as one would expect. However, if you were to try and access code in the client aspx design page, as you would in the code-behind, you run into problems.
For instance, in my BasePage i have a Public Enum named ThemedSites. It's just an enumerator that lists the 5 different themes my site could be skinned as. I, at times, need to do different things in code, and in design, depending on what theme I'm currently in. I have a Public Property named CurrentSite (might have been more appropriate to say CurrentTheme, but that's besides the point). CurrentSite's return type is ThemedSites. So in code, one would say something like:
[Code]....
This works great in any page that inherits the BasePage class. This falters when that very same logic is used in the design page like:
[Code]....
Now, it works if you fully qualify both sides of the condition, but that's not my question. My question is: why isn't the Imported NameSpace in the BasePage recognized in the client-side server tag, as one would think it would be, according to how it IS recognized in the server-side code-behind?
Do we have to do something special to have ASP.NET partial classes aware of controls that are declared in our user control's base classes? The partial classes keep generating declarations for controls in the base class which mean the controls in the base class get hidden and are null.
I am new in asp .net.I am not able to undestand why we call base class method when we override methods/events.Like automatically visual studio will put base.OnInit() if you are overriding OnInit.
I have to implement User base security in my Web project using .Net3.5. Followings are some we need:
Roles can be Admin, Manage, Editor, Member etc User can have multiple roles Every roles has its own dynamic menus and restrictions/resources All menus and interface will populate dynamically from Database
I heard some where this kind of i.e user base security can be implemented using HashTable but I dont know how is it?
Today I came to know that for this kind of work Java people use Interceptor Design patterns. So, how could I do the same in asp.net C#?
I am new to LINQ. when we drag tables we get a dbml file and designer file.
For example DataClasses1.dbml and DataClasses1.designer.cs.
Once we have them then we can start using our LINQ Queries.
In my company project I do not see this designer files and instead there are .tt files which were used as templates to greate ABC.generated.cs files. Is this same as designer class?
I'm curious as to what people consider better practice, between duplicating model structure in the view model and using a mapping tool to move data between the two, or aggregate the model inside the view model, i.e. have a property on the view model class that is a reference to the actual model. Which is considered a better approach in general?
I need to use Union for below Linq queries. I could use Union it if it was simple "select new whith{" but Now that I Specified Class, I encounter Error using union
What is the best approach to one to many relationships?
This is my scenario:
I have a simple one to many relation:
Customer CustomerID Name tel CustomerNotes Id Note customerID
I want to have a DETAIL view of customers and CREATE view for CustomerNotes all in the same page.
I create CustomerController and the different views and its respective actions for edit, create, delete, etc.
I also create a CustomerNotesController and the views and actions like before, but I made the views PARTIALS
I put a RENDERPARTIAL for the CustomerNotes create view in the Details view from Customer.
When I run the app, the page is render as expected: It shows the detail info of the customer and bellow the create form for the notes. However, when I click SAVE, nothing happens. I put a breakpoint in the notes controller and never get hit.
I also try with RenderAction and don't work at all.
From the following URL i got some doubts about the Recommendations for using Abstract class vs interfaces
[URL]
1. If you anticipate creating multiple versions of your component, create an abstract class. Abstract classes provide a simple and easy way to version your components. By updating the base class, all inheriting classes are automatically updated with the change. Interfaces, on the other hand, cannot be changed once created. If a new version of an interface is required, you must create a whole new interface. { Is there any example for this t ounderstand throughly ?} If you are designing small, concise bits of functionality, use interfaces. If you are designing large functional units, use an abstract class. If you want to provide common, implemented functionality among all implementations of your component, use an abstract class. Abstract classes allow you to partially implement your class, whereas interfaces contain no implementation for any members. { Is there any example for this t ounderstand throughly?